Spring Task定時任務(wù)的實現(xiàn)詳解
Spring Task定時任務(wù)
Cron表達式
以6-7位的一組數(shù)字,中間用空格間隔的字符串,表達一種時間
每位的含義及取值范圍:
秒(0-59) 分(0-59) 時(0-23) 日(1-31) 月(1-12) 周(1-7或SUN-SAT) 年(四位數(shù),可省略)
符號的含義:
*
表示所有值(秒位是*,則表示每秒)?
表示未說明的值,(日和周必須有一位為?,因為不合邏輯)-
表示一個指定的范圍,
表示一個可能值/
符號前表示開始時間,符號后表示每次遞增的值L
最后的,在’天’上表示這個月最后一天,用在’周’上表示’7或SUN’,在周上與數(shù)字一起,如"7L"表示這個月的最后一個周六(阿麥利卡日歷,1表示周日)W
只能用在’天’上, 用來描敘最接近指定天的工作日(周一到周五) ,如"15W"指"最近接這個月第15天的工作日",如果第15天是周六,那么會在第14天即周五觸發(fā)#
只能在’周’上使用,用來指定這個月的第幾個周幾,如’6#3’表示這個月的第三個周五(6表示周五,3表示第三周).如果指定日期不存在,那么將不會觸發(fā)C
指和canlendar聯(lián)系后計算過的值,如在’天’上標注’5C’指這個月第五天或之后包括canlendar的第一天;在’周’上標’1C’指這周日或之后包括calendar的第一天.
當(dāng)然不理解也沒關(guān)系,網(wǎng)上一搜就有很多Cron表達式在線生成器
實現(xiàn)定時任務(wù)
背景
使用異步進行文件上傳,將獲取token文件存到數(shù)據(jù)庫中,如果用戶在提交表單之前反復(fù)上傳文件會產(chǎn)生很多僵尸數(shù)據(jù),需要使用定時任務(wù)刪除僵尸token字段和上傳到服務(wù)器的圖片
實現(xiàn)
開啟任務(wù)調(diào)度
@EnableScheduling //開啟任務(wù)調(diào)度 @SpringBootApplication public class UploadApplication { public static void main(String[] args) { SpringApplication.run(UploadApplication.class, args); } }
編寫清除僵尸token業(yè)務(wù)
//mapper //獲取僵尸token的id List<Integer> selectDeadTokens(); //清除僵尸數(shù)據(jù) int deleteDeadToken(@Param("ids") List<Integer> ids);
<delete id="deleteDeadToken"> delete from imagetoken where id in <foreach collection="ids" item="e" open="(" separator="," close=")"> #{e} </foreach> </delete> <select id="selectDeadTokens" resultType="java.lang.Integer"> SELECT id FROM imagetoken t WHERE t.token NOT IN (select token FROM good) </select>
//service @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.SERIALIZABLE) @Override public void deleteDeadToken() { System.out.println("---開始清除所有僵尸token---"); List<Integer> list = imagetokenMapper.selectDeadTokens(); System.out.println("已找到"+list.size()+"條數(shù)據(jù)"); if (list.size()>0) { int result = imagetokenMapper.deleteDeadToken(list); System.out.println("本次刪除"+result+"條數(shù)據(jù)"); } }
查找數(shù)據(jù)庫中存放文件地址的集合
@Override public List<String> getList() { //條件構(gòu)造器 查存放地址 LambdaQueryWrapper<Good> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(Good::getSavepath); //this指的是當(dāng)前service List<Good> list = this.list(queryWrapper); // System.out.println("查詢到的數(shù)據(jù):"); // System.out.println(list); //獲取數(shù)據(jù)庫中所有圖片的絕對路徑List<String> ArrayList<String> paths = new ArrayList<>(); //將查到的數(shù)據(jù)中的文件地址遍歷到String類型的list中 list.stream().forEach(good -> { paths.add(good.getSavepath()); }); //System.out.println("查到的路徑:"+paths); return paths; }
使用@Scheduled注解開啟任務(wù)調(diào)度
@Value("${image.savepath}") String savePath; /** * 每天晚上23點清除無效token數(shù)據(jù)并刪除圖片 */ @Scheduled(cron = "0 0 23 * * ?") public void delete(){ //1.清除無效token imagetokenService.deleteDeadToken(); //2.刪除僵尸文件 //2.1獲取數(shù)據(jù)庫中文件存儲列表 List<String> paths = goodService.getList(); //2.2 獲取圖片存儲地址 File target=new File(savePath); //2.3遍歷圖片存儲所在文件夾的文件 File[] files=target.listFiles(); for (File file : files) { if (file.isFile()){ //2.4獲取存儲文件的絕對地址,需要將盤符修改, String absPath = file.getAbsolutePath().replaceAll("\\\\", "/"); //2.5將不存在的文件刪除 if(!paths.contains(absPath)){ //System.out.println("要刪除文件的覺得路徑:"+absPath); file.delete(); } } } }
到此這篇關(guān)于Spring Task定時任務(wù)的實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Spring定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring?cloud?eureka注冊原理-注冊失敗填坑筆記
這篇文章主要介紹了spring?cloud?eureka注冊原理-注冊失敗填坑筆記,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05springboot開發(fā)擴展springmvc實現(xiàn)解析
這篇文章主要介紹了springboot開發(fā)擴展springmvc實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02利用Jackson實現(xiàn)數(shù)據(jù)脫敏的示例詳解
在我們的企業(yè)項目中,為了保護用戶隱私,數(shù)據(jù)脫敏成了必不可少的操作,那么我們怎么優(yōu)雅的利用Jackson實現(xiàn)數(shù)據(jù)脫敏呢,本文就來和大家詳細聊聊,希望對大家有所幫助2023-05-05java連接池Druid獲取連接getConnection示例詳解
這篇文章主要為大家介紹了java連接池Druid獲取連接getConnection示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09基于SpringBoot實現(xiàn)IP黑白名單的詳細步驟
IP黑白名單是網(wǎng)絡(luò)安全管理中常見的策略工具,用于控制網(wǎng)絡(luò)訪問權(quán)限,根據(jù)業(yè)務(wù)場景的不同,其應(yīng)用范圍廣泛,比如比較容易被盜刷的短信接口、文件接口,都需要添加IP黑白名單加以限制,所以本文給大家介紹了基于SpringBoot實現(xiàn)IP黑白名單的詳細步驟,需要的朋友可以參考下2024-01-01Apache?Maven3.6.0的下載安裝和環(huán)境配置(圖文教程)
本文主要介紹了Apache?Maven3.6.0的下載安裝和環(huán)境配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Maven?pom.xml文件獲取當(dāng)前時間戳方式
這篇文章主要介紹了Maven?pom.xml文件獲取當(dāng)前時間戳方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12