Spring/etc
-
spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
[Spring] @Retryable @Transational 적용 순서spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
2024.03.27 -
순단과 같은 네트워크 에러가 가끔 발생하는 부분에 대한 처리를 어떻게 해야 할지 고민하는 도중 spring-retry를 발견하게 되었고, 간편하게 retry 로직을 수행할 수 있을 것 같아 학습하고 적용해 보았다. Spring project https://github.com/spring-projects/spring-retry Dependency implementation("org.springframework.retry:spring-retry") implementation("org.springframework:spring-aspects") @EnableRetry @Configuration @EnableRetry public class MyConfig { ... } @Retryable @Retryable( ..
[Spring] spring-retry 재시도 with TestCode순단과 같은 네트워크 에러가 가끔 발생하는 부분에 대한 처리를 어떻게 해야 할지 고민하는 도중 spring-retry를 발견하게 되었고, 간편하게 retry 로직을 수행할 수 있을 것 같아 학습하고 적용해 보았다. Spring project https://github.com/spring-projects/spring-retry Dependency implementation("org.springframework.retry:spring-retry") implementation("org.springframework:spring-aspects") @EnableRetry @Configuration @EnableRetry public class MyConfig { ... } @Retryable @Retryable( ..
2024.03.23 -
@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
[Spring] @Transactional 동작방식 및 주의사항@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
2023.11.21 -
테스트 수행 시, 각 phase별로 설정이 다른 경우나 특정 phase인 상황을 테스트하고 싶을 수 있다. 그런 경우 어떻게 설정하는지 알아보도록 하자. @Profile 빈이나, 컴포넌트에 프로필을 구분하여 등록할 수 있게 해주는 어노테이션 @TestConfiguration public class TestConfiguration { @Bean @Profile("beta") public DataSource DataSource() { return new Log4jdbcProxyDataSource(hikariDataSource()); } @Bean @Profile("alpha") public DataSource testDataSource() { return new HikariDataSource(hikariDa..
[Spring] @ActiveProfiles, @Profile 활용 in Test테스트 수행 시, 각 phase별로 설정이 다른 경우나 특정 phase인 상황을 테스트하고 싶을 수 있다. 그런 경우 어떻게 설정하는지 알아보도록 하자. @Profile 빈이나, 컴포넌트에 프로필을 구분하여 등록할 수 있게 해주는 어노테이션 @TestConfiguration public class TestConfiguration { @Bean @Profile("beta") public DataSource DataSource() { return new Log4jdbcProxyDataSource(hikariDataSource()); } @Bean @Profile("alpha") public DataSource testDataSource() { return new HikariDataSource(hikariDa..
2023.08.26