Springboot定時任務配置及遇到的問題
阿新 • • 發佈:2019-01-25
SpringBoot定時任務配置及遇到的問題
在springboot中遇到的問題筆記
目錄
註解配置
建立定時任務執行類,配置定時任務註解@Scheduled
springboot可以很方便通過註解配置定時任務,不需要配置檔案
@Component
public class ScheduledTask {
@Autowired
private CarDataService carDataService;
//定時任務註解,表示每30秒執行一次
@Scheduled(cron = "0/30 * * * * *")
public void entranceScheduled() {
log.info(">>>>>定時任務開始 時間{}", Timestamp.valueOf(LocalDateTime.now()));
//要捕獲異常,不然發生異常後定時任務將不再執行
try {
carDataService.carCheckInTask();
} catch (Exception e) {
log.info(">>>任務執行失敗 時間{} 錯誤資訊", Timestamp.valueOf(LocalDateTime.now()), e.getMessage());
}
log.info(">>>>>時間任務結束 時間{}" , Timestamp.valueOf(LocalDateTime.now()));
}
}
講講cron表示式
java中cron表示式是7位,從左到右依次為秒,分,時,日,月,周,年.
- 星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
- 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
- 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
- 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | + year [optional]
| | | | | +----- day of week (0 - 7) (Sunday=0 or 7)
| | | | +---------- month (1 - 12)
| | | +--------------- day of month (1 - 31)
| | +-------------------- hour (0 - 23)
| +------------------------- min (0 - 59)
+------------------------------ second (0 - 59)
注意事項
- 配置定時任務,application一定要加@EnableScheduling註解才能執行
@SpringBootApplication
@EnableScheduling
public class ParkingDataDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ParkingDataDemoApplication.class, args);
}
}
- 定時任務預設是單個執行緒執行,若要多執行緒執行需建立ScheduledThreadPoolExecutor執行緒池
@Component
@Configuration
public class ScheduledTask implements SchedulingConfigurer {
//建立一個定時任務執行緒池
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//設定一個長度5的定時任務執行緒池
ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(5);
scheduledTaskRegistrar.setScheduler(scheduledThreadPoolExecutor);
}
}
定時任務需要新增
try catch
如果定時任務執行過程中遇到發生異常,則後面的任務將不再執行,會出現定時任務執行一段時間不執行的情況.