天天看點

@Scheduled 多個定時任務同時執行

這篇文章主要介紹了springBoot @Scheduled實作多個任務同時開始執行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@Scheduled 多個定時任務同時執行

1、定時任務是單線程運作的

定時任務是單線程執行的,預設一個時間段隻能執行一個定時任務

如果多個定時任務同時執行的話,那麼會按照順序執行

2、多線程開啟定時任務

@Service
@Component
@EnableScheduling
public class SendMsgNoticeServiceTimer {
    private static final Logger logger = LoggerFactory.getLogger(SendMsgNoticeServiceTimer.class);

    @Autowired
    private NySendMsg nySendMsg;

 //建立定時任務線程池
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(64);
        return taskScheduler;
    }

    @Scheduled(cron="0 0 10 * * ?")
    public void sendPaymentNotice() {
         logger.info("***-sendPaymentNotice--定時任務每天淩晨10點執行一次---***");

        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
        String endDate = sf.format(new Date());
        JSONObject obj = sendTradingFeeChoosed(String.valueOf(1));
        logger.info("***---定時任務" + endDate + ":系統自動發送" + obj.size() + "條短信提醒---***");

    }

    @Scheduled(cron="0 0 10 * * ?")
    public void sendLateRemind() {
         logger.info("***--sendLateRemind---定時任務每天淩晨10點執行一次---***");

        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
        String endDate = sf.format(new Date());
        JSONObject obj = sendTradingFeeChoosed(String.valueOf(2));
        logger.info("***---定時任務" + endDate + ":系統自動發送" + obj.size() + "條短信提醒---***");

    }
}
      

繼續閱讀