spring schedule 定时任务,线程阻塞。重写定时任务线程池。
@Configuration
public class AppConfig implements SchedulingConfigurer {
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler pool = new ThreadPoolTaskScheduler();
pool.setPoolSize(20);
pool.setThreadNamePrefix("picture-");
pool.setAwaitTerminationSeconds(60);
pool.setWaitForTasksToCompleteOnShutdown(true);
return pool;
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
TaskScheduler taskScheduler = this.taskScheduler();
scheduledTaskRegistrar.setScheduler(taskScheduler);
}
}
重写异步线程池
@Override
public Executor getAsyncExecutor() {
return authContextAsync();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new CustomAsyncExceptionHandler();
}
/**
*
* 说明:构建异步异常处理类
* @Title: ExecutorConfig.java
* @Package com.witsight.auth.config
* @See: {@link AsyncUncaughtExceptionHandler} </br>
* @Copyright: Copyright (c) 2017 </br>
* @Company: sany huax witsight team by product
* @author: fuyp
* @date: 2018年7月1日 下午12:33:17
* @version: V1.0
*
*/
public static class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
// 日志对象
private static final Logger log = LoggerFactory.getLogger(CustomAsyncExceptionHandler.class);
@Override
public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
if (log.isErrorEnabled()) {
log.error("Exception message - {}",throwable.getMessage());
log.error("Method name - {}",method.getName());
}
for (Object param : obj) {
log.error("Parameter value - {}",param);
}
}
}