본문 바로가기

Programing/Framework

(72)
[SpringBoot] HikariCP의 leakDetectionThreshold 기본값은? SpringBoot에서는 기본 커넥션 풀을 HikariCP을 쓴다. 가끔 long query가 있는지 가끔 누수가 검출되었다고 나온다. 그런데 좀 지나면 해당 커넥션이 회수되었다고 뒷북(?) 로그가 나온다. 회수가 되었으니 누수는 아닌데 에러 로그에 껴있어서 신경이 쓰인다. 스프링부트에는 spring.datasource.hikari.leak-detection-threshold 라는 프로퍼티가 있다. 실제 HikariCP에서는 leakDetectionThreshold 프로퍼티에 대응된다. com.zaxxer.hikari.HikariConfig 클래스에 보면 leakDetectionThreshold 필드가 있다. 기본값 디버깅 부트가 기본값으로 얼마를 넣어주는지 궁금해서 디버깅을 해보았다. org.sprin..
[SpringFramework] StopWatch (Spring vs Apache) 자바에서 두 점 사이의 시간을 재는 방법에는 currentTimeMillis 와 nanoTime가 있다. 이 정적메서드에 대해서는 지난 주에 심층(?) 분석을 해보았다. [JVM] currentTimeMillis vs nanoTime 하지만 직접 날 것(raw)의 메서드로 사용할 대는 응집성이 떨어질 수 있으므로 스톱와치와 같은 실세상과 비슷한 유틸리티 클래스를 이용하면 좋을 것이다. 이 글은 스프링의 StopWatch에 대해 적으려고 하였지만 사실 Apache Commons Lang 유틸리티에도 StopWatch를 가지고 있었다. 스프링의 StopWatch https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/St..
[Spring Boot] spring-boot-devtools spring-boot-devtools 는 개발용 기능을 가지고 있다.live 혹은 production 환경에서 구동을 안하는 것을 권장하고 있다. Maven의 경우 optional을 true로 하면 된다. 하지만 Gradle은 optional이 없다.이전에 설정을 보니 아래와 같이 되어 있었다.runtime "org.springframework.boot:spring-boot-devtools" 하지만 제대로 동작을 하지 않는 것 같았고,찾아보니 해당 이슈에 대한 Github에 이슈가 있었다.Devtools documentation incorrectly uses compileOnly Gradle scope #14451 현재는 레퍼런스 문서도 수정되어 있다.https://docs.spring.io/spring..
[Spring Framework] Java와 Groovy 문법 삽질기 오늘의 삽질1. Java: 익명 서브클래스의 문법 주의사항2. Spock: Groovy의 프로퍼티 접근자 주의사항 아래와 같은 코드가 있다.public abstract class RestTemplateBase { @Autowired PoolingHttpClientConnectionManager connectionManager; protected RestTemplate getRestTemplate(int timeout) { 레거시코드인데 상속을 받는 구조로 되어 있었다. 상속을 받은 클래스에서 커스텀 RestTemplate를 반환하는 메서드를 사용하고 있었다.(나중에 생성자 주입으로 바꿀 예정이지만) 테스트 코드가 없어서 다음과 같은 테스트 코드를 만들었다. (테스트 코드가 구현이 완료된 것이 아니므로 주..
[Spock] Internal of spock (Specification) Spock에서 테스트 코드를 구현하기 위해서는 Specification을 직접 혹은 간접적으로 상속받아 구현한다.class MyFirstSpecification extends Specification { 이 spock.lang.Specification는 MockingApi를 상속받는 추상메서드이다.public abstract class Specification extends MockingApi이 Specification 추상클래스는 Groovy의 with와 유사한 기능을 하는 with 구문을 포함해서 예외에 대한 동작 등을 가지고 있다. (버전 1.2 기준) 이 Specification은 MockingApi를 상속받고 있고, MockingApi는 SpecInternals를 상속받는다.SpecInterna..
[SpringBoot] Exception Handler에서 ResponseStatus에 reason를 적으면... 삽질 할 뻔한 예외 처리기... Exception Handler에서 ResponseStatus에 reason를 적으면 return 한 형태의 객체로 반환이 안되고 임의의 형태로 반환된다.@RestControllerAdvice public class ApiExceptionHandler { @ExceptionHandler(NotFoundJobException.class) @ResponseStatus(value = HttpStatus.NOT_FOUND, reason="No Job Found") public AcAuthResult notCompletedJobExceptionHandler(NotFoundJobException ex) { return AcAuthResult.builder() .jobId(ex.get..
[SpringBoot] yml에서 Duration 사용하기는 2.1 부터 지원 yml 프로퍼티에서 Duration 사용을 하고 있었다. pilot 프로젝트에서는 @Value로 잘 주입이 되는데, 본 branch로 해당 설정 코드를 옮겨오니 아래와 같은 에러가 발생했다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoBean' defined in com.github.detouched.DemoValueApp: Unsatisfied dependency expressed through method 'demoBean' parameter 0; nested exception is org.springframework.beans.ConversionNotSupport..
[spring boot] Cannot find template location: classpath:/templates/ 스프링 부트에서 아래와 같은 메세지가 보인다면...2018-11-19 17:44:57.150 WARN 15780 --- [ main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)스프링 부트 스타터 중에 템플릿을 implement 하고 있으나 템플릿이 없는지 확인해보자.예)implementation('org.springframework.boot:spring-boot-starter-thymeleaf')곧 템플릿을 만들 것이라면,,,resources 밑에 templat..