JAVA-18602: update spring-retry version (#13637)

* java-18602 update spring-retry version

* java-18602 spring-scheduling, improve test coverage

* Replace usage of deprecated function in springframework-util with apache-common-lang library
This commit is contained in:
3hsan 2023-03-24 07:15:13 +01:00 committed by GitHub
parent 6a2d723155
commit 19eb14d09d
5 changed files with 17 additions and 7 deletions

View File

@ -23,6 +23,7 @@
<dependency> <dependency>
<groupId>org.springframework.retry</groupId> <groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId> <artifactId>spring-retry</artifactId>
<version>${spring-retry.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
@ -45,6 +46,7 @@
</dependencies> </dependencies>
<properties> <properties>
<spring-retry.version>2.0.0</spring-retry.version>
<annotation-api.version>1.3.2</annotation-api.version> <annotation-api.version>1.3.2</annotation-api.version>
</properties> </properties>

View File

@ -7,7 +7,6 @@ import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

View File

@ -2,7 +2,6 @@ package com.baeldung.springretry;
import java.sql.SQLException; import java.sql.SQLException;
import org.springframework.context.annotation.PropertySource;
import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover; import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable; import org.springframework.retry.annotation.Retryable;
@ -13,13 +12,13 @@ public interface MyService {
@Retryable @Retryable
void retryService(); void retryService();
@Retryable(value = SQLException.class) @Retryable(retryFor = SQLException.class)
void retryServiceWithRecovery(String sql) throws SQLException; void retryServiceWithRecovery(String sql) throws SQLException;
@Retryable(value = { SQLException.class }, maxAttempts = 2, backoff = @Backoff(delay = 100)) @Retryable(retryFor = SQLException.class , maxAttempts = 2, backoff = @Backoff(delay = 100))
void retryServiceWithCustomization(String sql) throws SQLException; void retryServiceWithCustomization(String sql) throws SQLException;
@Retryable( value = SQLException.class, maxAttemptsExpression = "${retry.maxAttempts}", @Retryable(retryFor = SQLException.class, maxAttemptsExpression = "${retry.maxAttempts}",
backoff = @Backoff(delayExpression = "${retry.maxDelay}")) backoff = @Backoff(delayExpression = "${retry.maxDelay}"))
void retryServiceWithExternalConfiguration(String sql) throws SQLException; void retryServiceWithExternalConfiguration(String sql) throws SQLException;

View File

@ -5,7 +5,7 @@ import java.sql.SQLException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.apache.commons.lang3.StringUtils;
@Service @Service
public class MyServiceImpl implements MyService { public class MyServiceImpl implements MyService {

View File

@ -1,8 +1,14 @@
package com.baeldung.springretry; package com.baeldung.springretry;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.retry.support.RetryTemplate; import org.springframework.retry.support.RetryTemplate;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ -14,8 +20,10 @@ import java.sql.SQLException;
@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class) @ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class)
public class SpringRetryIntegrationTest { public class SpringRetryIntegrationTest {
@Autowired @SpyBean
private MyService myService; private MyService myService;
@Value("${retry.maxAttempts}")
private String maxAttempts;
@Autowired @Autowired
private RetryTemplate retryTemplate; private RetryTemplate retryTemplate;
@ -33,11 +41,13 @@ public class SpringRetryIntegrationTest {
@Test @Test
public void givenRetryServiceWithCustomization_whenCallWithException_thenRetryRecover() throws SQLException { public void givenRetryServiceWithCustomization_whenCallWithException_thenRetryRecover() throws SQLException {
myService.retryServiceWithCustomization(null); myService.retryServiceWithCustomization(null);
verify(myService, times(Integer.parseInt(maxAttempts))).retryServiceWithCustomization(any());
} }
@Test @Test
public void givenRetryServiceWithExternalConfiguration_whenCallWithException_thenRetryRecover() throws SQLException { public void givenRetryServiceWithExternalConfiguration_whenCallWithException_thenRetryRecover() throws SQLException {
myService.retryServiceWithExternalConfiguration(null); myService.retryServiceWithExternalConfiguration(null);
verify(myService, times(Integer.parseInt(maxAttempts))).retryServiceWithExternalConfiguration(any());
} }
@Test(expected = RuntimeException.class) @Test(expected = RuntimeException.class)