@EnableAsync
@Configuration
@SpringBootApplication
@EnableScheduling
public class XXXXApplication {
public static void main(String[] args) {
SpringApplication.run(XXXXApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//50s
requestFactory.setConnectTimeout(50*1000);
requestFactory.setReadTimeout(50*1000);
return new RestTemplate(requestFactory);
}
// 创建用于重试的retryTemplate
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
//新建RetryPolicy 也就是判断是否重新执行的机制
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(10);//配置的重试次数//一直重新执行 10次
retryTemplate.setRetryPolicy(retryPolicy);
//新建BackOffPolicy机制 也就是重新执行时的相关设置
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setInitialInterval(2 * 1000);//执行操作的时间间隔
exponentialBackOffPolicy.setMultiplier(2);//分别设置指数增长的倍数 则 四次分别为 2,8,512,……
exponentialBackOffPolicy.setMaxInterval(40 * 1000);//最大的间隔时间 为40秒
retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
return retryTemplate;
}
}
上面的代码复制到启动类里,然后需要使用的时候直接注入就可以了。
关于 RetryTemplate 的使用,可以看我另一个链接:关于卡死、retryTemplate重启