Spring Boot定時任務單線程多線程實現(xiàn)代碼解析
1、創(chuàng)建定時任務:
@Component
public class AutoNotifyController {
/**
* 獲取RedisUtils注入的bean
*
* @return
*/
private ThreadUtil getThreadUtil() {
ThreadUtil threadUtil = SpringContextUtil.getBean("threadUtil");
return threadUtil;
}
/**
* @描述: 推送啟動充電結果的自動獲取和處理分發(fā)方法
* @輸入值: void
* @返回值: void
*/
@Scheduled(cron = "*/5 * * * * ?")
public void AutoNotifyStartChargeResult() {
getThreadUtil().AutoNotifyStartChargeResult();
}
/**
* @描述: 推送充電狀態(tài)的自動獲取和處理分發(fā)方法
* @輸入值: void
* @返回值: void
*/
@Scheduled(cron = "*/50 * * * * ?")
public void AutoNotifyChargeStatus() {
getThreadUtil().AutoNotifyChargeStatus();
}
/**
* @描述: 推送停止充電結果的自動獲取和處理分發(fā)方法
* @輸入值: void
* @返回值: void
*/
@Scheduled(cron = "*/5 * * * * ?")
public void AutoNotifyStopChargeResult() {
getThreadUtil().AutoNotifyStopChargeResult();
}
/**
* @描述: 推送訂單信息的自動獲取和處理分發(fā)方法
* @輸入值: void
* @返回值: void
*/
@Scheduled(cron = "*/5 * * * * ?")
public void AutoNotifyOrderInfo() {
getThreadUtil().AutoNotifyOrderInfo();
}
/**
* @描述: 公共信息部分的設備狀態(tài)變化推送接口的自動獲取和處理分發(fā)方法
* @輸入值: void
* @返回值: void
*/
@Scheduled(fixedRate = 200)
public void checkGunStatus() {
getThreadUtil().checkGunStatus();
}
/**
* @描述: 對于Redis中的活躍訂單增加和刪除的輪詢執(zhí)行方法
*/
@Scheduled(cron = "*/5 * * * * ?")
public void ActiveOrderAddAndDelete() {
getThreadUtil().ActiveOrderAddAndDelete();
}
/**
* @描述: 對于Redis中的結束訂單訂單增加和刪除的輪詢執(zhí)行方法
*/
@Scheduled(cron = "*/5 * * * * ?")
public void EndOrderAddAndDelete() {
getThreadUtil().EndOrderAddAndDelete();
}
}
使用 @Scheduled來創(chuàng)建定時任務 這個注解用來標注一個定時任務方法。
通過看 @Scheduled源碼可以看出它支持多種參數(shù):
(1)cron:cron表達式,指定任務在特定時間執(zhí)行;
(2)fixedDelay:表示上一次任務執(zhí)行完成后多久再次執(zhí)行,參數(shù)類型為long,單位ms;
(3)fixedDelayString:與fixedDelay含義一樣,只是參數(shù)類型變?yōu)镾tring;
(4)fixedRate:表示按一定的頻率執(zhí)行任務,參數(shù)類型為long,單位ms;
(5)fixedRateString: 與fixedRate的含義一樣,只是將參數(shù)類型變?yōu)镾tring;
(6)initialDelay:表示延遲多久再第一次執(zhí)行任務,參數(shù)類型為long,單位ms;
(7)initialDelayString:與initialDelay的含義一樣,只是將參數(shù)類型變?yōu)镾tring;
(8)zone:時區(qū),默認為當前時區(qū),一般沒有用到。
2、開啟定時任務:
@SpringBootApplication
@EnableScheduling
public class PositivebuttjointApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(PositivebuttjointApplication.class, args);
}
注:這里的 @EnableScheduling 注解,它的作用是發(fā)現(xiàn)注解 @Scheduled的任務并由后臺執(zhí)行。沒有它的話將無法執(zhí)行定時任務。
引用官方文檔原文:
@EnableScheduling ensures that a background task executor is created. Without it, nothing gets scheduled.
3、執(zhí)行結果(單線程)
就完成了一個簡單的定時任務模型,下面執(zhí)行springBoot觀察執(zhí)行結果:

從控制臺輸入的結果中我們可以看出所有的定時任務都是在同一個線程池用同一個線程來處理的,那么我們如何來并發(fā)的處理各定時任務呢,請繼續(xù)向下看。
4、多線程處理定時任務:
1.開啟多線程
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class PositivebuttjointApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
SpringApplication.run(PositivebuttjointApplication.class, args);
}
加入@EnableAsync開啟多線程
2.使用多線程
@Async
public void AutoNotifyStartChargeResult() {
}
調用的方法上加上@Async使用多線程
3.配置連接池
@Configuration
public class ScheduleConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(this.getTaskScheduler());
}
private ThreadPoolTaskScheduler getTaskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(20);
taskScheduler.setThreadNamePrefix("schedule-pool-");
taskScheduler.initialize();
return taskScheduler;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- SpringBoot定時任務參數(shù)運行代碼實例解析
- SpringBoot整合SpringTask實現(xiàn)定時任務的流程
- Spring Boot @Scheduled定時任務代碼實例解析
- Spring boot基于ScheduledFuture實現(xiàn)定時任務
- SpringBoot集成Quartz實現(xiàn)定時任務的方法
- Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務的示例
- springboot實現(xiàn)多實例crontab搶占定時任務(實例代碼)
- SpringBoot基于數(shù)據(jù)庫的定時任務統(tǒng)一管理的實現(xiàn)
相關文章
java實現(xiàn)的連接oracle/mysql數(shù)據(jù)庫功能簡單示例【附oracle+mysql數(shù)據(jù)庫驅動包】
這篇文章主要介紹了java實現(xiàn)的連接oracle/mysql數(shù)據(jù)庫功能,結合實例形式分析了java基于jdbc連接Oracle與mysql的相關操作技巧,并附帶完整實例代碼與oracle+mysql數(shù)據(jù)庫驅動包供讀者下載參考,需要的朋友可以參考下2017-10-10
Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件
這篇文章主要介紹了Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件的功能,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-04-04
Java多線程案例實戰(zhàn)之定時器的實現(xiàn)
在Java中可以使用多線程和定時器來實現(xiàn)定時任務,下面這篇文章主要給大家介紹了關于Java多線程案例之定時器實現(xiàn)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01

