1、配置異步線程池
import java.util.concurrent.Executor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration @EnableAsync//開啟異步事件的支持 public class AsyncConfig { /* * 此處成員變量應該使用@Value從配置中讀取 */ private int corePoolSize = 10; private int maxPoolSize = 200; private int queueCapacity = 10; @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.initialize(); return executor; } }
2、定時任務類
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class ScheduledService { private Logger logger = LoggerFactory.getLogger(ScheduledService.class); @Scheduled(cron = "0/5 * * * * *") @Async public void scheduled() { logger.info("=====>>>>>使用cron {}", System.currentTimeMillis()); } @Scheduled(fixedRate = 5000) @Async public void scheduled1() { logger.info("=====>>>>>使用fixedRate{}", System.currentTimeMillis()); } @Scheduled(fixedDelay = 5000) @Async public void scheduled2() { logger.info("=====>>>>>fixedDelay{}", System.currentTimeMillis()); } }