이전에 Spring + MyBatis에서 Query 변경시 서버 재시작 없이 Reload 하기에 대한 글을 작성했었다. Spring + Mybatis 에서 Query 변경시 서버 재시작 없이 Reload 하기 MyBatis 를 사용하여 개발하는 경우 쿼리를 수정했을때 WAS를 재기동해야 변경된 내용이 반영된다. 클래스가 몇개 없는 작은 프로젝트에서는 이렇게 재기동을 해서 확인을 하는것이 큰 부담이 없 oingdaddy.tistory.com 하지만 요즘 대세인 Springboot 환경에서 적용하기 위해서 Java Config로 이를 전환하였다. Xml Config에서 Java Config로 전환을 하는데 RefreshableSqlSessionFactoryBean을 그대로 사용하니 잘 동작하지 않았다. 그래..
MyBatis 를 사용하여 개발하는 경우 쿼리를 수정했을때 WAS를 재기동해야 변경된 내용이 반영된다. 클래스가 몇개 없는 작은 프로젝트에서는 이렇게 재기동을 해서 확인을 하는것이 큰 부담이 없지만 재기동되는데 시간이 오래 걸리는 프로젝트인 경우는 이것은 큰 부담이 된다. 이를 해결해주기 위해 어느 능력자분이 서버의 재기동 없이 Query Reload를 해주는 로직을 개발해주셨다. RefreshableSqlSessionFactoryBean 라는 아주 유명한 로직이다. 언제 누가 만든건지 모르지만 일단 그분께 감사를 드린다. 2011년도에도 이걸 사용했던것 같은데 벌써 10년이 지났다. 시간 참 빠르다. RefreshableSqlSessionFactoryBean.java import java.io.IOEx..
Spring (Springboot) 에서는 선언적 Transaction 관리를 한다. 이는 비즈니스 로직에 트랜잭션 로직을 심는것이 아닌 설정이나 어노테이션으로 간편하게 트랜잭션을 정의하는것을 말한다. 이렇게 트랜잭션 정의를 할때 timeout은 어떻게 설정하는지 알아보자. Transaction에서의 timeout은 지정한 시간 내에 해당 메소드 수행이 완료되지 않은 경우 rollback 수행하는것을 말한다. 참고로 Spring의 default timeout은 -1 이다. (timeout 무제한) 전역 timeout 설정 (application.yml or application.properties) spring: transaction: default-timeout: 10 이렇게 spring.transac..
cache는 거의 변경될 여지가 없는 DB 조회 결과값을 메모리 혹은 디스크에 보관하고 있다가 다시 호출되었을때는 DB 조회를 하지 않고 메모리에 있는 결과값을 그대로 쓰고 싶을때 사용한다. 많은 cache 관련 lib들이 있지만 가장 대표적으로 많이 사용되고 있는 ehcache를 springboot와 연동하고 사용하는 방법에 대해서 기술해보고자 한다. 필자는 springboot 2.3.x, java11, maven, ehcache 2.x 환경이다. 설정 pom.xml org.springframework.boot spring-boot-starter-cache net.sf.ehcache ehcache 2.10.6 가장 먼저 해야 할 일은 dependency를 추가하는 일이다. springboot에서 간편히..
하나의 application에서 여러개의 DB에 connection을 해야 하는 상황이다. springboot에서는 이를 어떻게 처리해야 할까? 약간의 설정을 추가해줌으로써 쉽게 가능하다. application.yml 변경 AS-IS spring: datasource: driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@xx.xx.xx.xx:1521:OINGDADDY username: oing password: daddy 기존에는 기본 datasource와 sqlSessionFactory를 사용을 했었다. 따라서 이렇게만 설정해주면 어디서든 DataSource와 SqlSessionFactory를 주입받아 사용할 수 있었다. 하지만 다중 ..
Springboot에서 datasource 설정을 Config class에서 할 때 보통 다음과 같이 한다. @Bean @ConfigurationProperties(prefix = "spring.datasource-mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create() .type(HikariDataSource.class) .build(); } 이때 @ConfigurationProperties 부분이 warning이 뜬다. @ConfigurationProperties은 *.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서 사용할 수 있게 해주는 어노테이션이다. @Configur..
Springboot를 사용하면 기본적으로 사용할 수 있는 환경설정 파일은 application.properties이다. 작은 프로젝트에서는 이것만 사용해도 문제는 없지만 규모가 커지면 이 파일 하나에 설정을 관리하기 벅찰수도 있다. 이럴 때 용도에 맞게 이 파일을 분리해서 사용하면 여러모로 유용하다. 1. properties 파일 분리 일단은 application.properties 파일을 사용했을 때 다른 properties 파일을 추가로 생성하고 이것도 동일하게 외부 환경변수를 관리하고자 한다. 예를들면 db.properties 파일을 추가로 설정하는 경우이다. @PropertySource(value = { "classpath:project.properties" }) @SpringBootApplica..
Controller [com.sample.controller.SomeController] Method [public com.sample.SomeObject com.sample.controller.SomeController.page(public com.sample.SomeObject)] with argument values: [0] [type=org.springframework.validation.support.BindingAwareModelMap] [value={}] ] with root cause java.lang.IllegalArgumentException: argument type mismatch at java.base/jdk.internal.reflect.NativeMethodAccessorImp..