Spring Boot學習(三):定時任務
一、簡介
專案中經常會遇到使用定時任務的情況,那麼SpringBoot如何實現這種需求呢,還是簡潔到要命。
二、環境準備
eclipse + maven + Spring Boot
三、程式碼示例
pom.xml檔案不用特殊引入依賴包,保持一般初始化就可以,如下:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
啟動類MyprojectApplication.java中,加入@EnableScheduling註解,開啟定時任務配置。
package com.example.myproject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling //開啟定時任務配置 @SpringBootApplication public class MyprojectApplication { public static void main(String[] args) { SpringApplication.run(MyprojectApplication.class, args); } }
建立定時任務類ScheduleTask.java
package com.example.myproject.service.task; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * @類名: ScheduleTask * @描述: 定時任務類 */ @Component public class ScheduleTask { @Scheduled(cron="0/10 * * * * *") public void printLog(){ System.out.println("執行定時任務---" + new Date()); } }
執行結果
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.3.RELEASE)
2018-07-26 16:35:02.808 INFO 18448 --- [ main] c.e.myproject.MyprojectApplication : Starting MyprojectApplication on DESKTOP-249EABQ with PID 18448 (D:\WorkSpace\studyWorkspace\myproject\target\classes started by admin in D:\WorkSpace\studyWorkspace\myproject)
2018-07-26 16:35:02.811 INFO 18448 --- [ main] c.e.myproject.MyprojectApplication : No active profile set, falling back to default profiles: default
2018-07-26 16:35:02.878 INFO 18448 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.ser[email protected]16e7dcfd: startup date [Thu Jul 26 16:35:02 CST 2018]; root of context hierarchy
2018-07-26 16:35:03.838 INFO 18448 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2018-07-26 16:35:03.861 INFO 18448 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2018-07-26 16:35:03.861 INFO 18448 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-07-26 16:35:03.870 INFO 18448 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_151\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_171/bin/server;C:/Program Files/Java/jre1.8.0_171/bin;C:/Program Files/Java/jre1.8.0_171/lib/amd64;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\System32\OpenSSH\;D:\ProjectTools\Oracle\product\11.2.0\client_1\BIN;C:\ProjectTools\Oracle\product\11.2.0\client_1\BIN;C:\Oracle\product\11.2.0\client_1\BIN ;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;;D:\ProjectTools\eclipse;;.]
2018-07-26 16:35:03.962 INFO 18448 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-07-26 16:35:03.962 INFO 18448 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1097 ms
2018-07-26 16:35:04.110 INFO 18448 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2018-07-26 16:35:04.115 INFO 18448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-07-26 16:35:04.115 INFO 18448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-07-26 16:35:04.115 INFO 18448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-07-26 16:35:04.115 INFO 18448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2018-07-26 16:35:04.235 INFO 18448 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-26 16:35:04.412 INFO 18448 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.ser[email protected]16e7dcfd: startup date [Thu Jul 26 16:35:02 CST 2018]; root of context hierarchy
2018-07-26 16:35:04.470 INFO 18448 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-07-26 16:35:04.471 INFO 18448 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-07-26 16:35:04.490 INFO 18448 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-26 16:35:04.490 INFO 18448 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-26 16:35:04.609 INFO 18448 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-07-26 16:35:04.622 INFO 18448 --- [ main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2018-07-26 16:35:04.736 INFO 18448 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-07-26 16:35:04.739 INFO 18448 --- [ main] c.e.myproject.MyprojectApplication : Started MyprojectApplication in 2.207 seconds (JVM running for 2.95)
執行定時任務---Thu Jul 26 16:35:10 CST 2018
執行定時任務---Thu Jul 26 16:35:20 CST 2018
執行定時任務---Thu Jul 26 16:35:30 CST 2018
執行定時任務---Thu Jul 26 16:35:40 CST 2018
執行定時任務---Thu Jul 26 16:35:50 CST 2018
定時任務的基本配置就可以了,是不是很簡潔。
假如,要讓定時時間設定可配置,可在application.properties檔案中,增加如下配置資訊。
#========================================================================================
# task分散式任務:非同步作業
#========================================================================================
#定時器設定
task.cron = 0/15 * * * * *
修改定時任務類ScheduleTask.java,如下
package com.example.myproject.service.task;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @類名: ScheduleTask
* @描述: 定時任務類
*/
@Component
public class ScheduleTask {
//@Scheduled(cron="0/10 * * * * *")
@Scheduled(cron = "${task.cron}")
public void printLog(){
System.out.println("執行定時任務---" + new Date());
}
}
執行結果
2018-07-26 16:48:19.237 INFO 19084 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-07-26 16:48:19.260 INFO 19084 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-26 16:48:19.260 INFO 19084 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-26 16:48:19.381 INFO 19084 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-07-26 16:48:19.394 INFO 19084 --- [ main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2018-07-26 16:48:19.488 INFO 19084 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-07-26 16:48:19.491 INFO 19084 --- [ main] c.e.myproject.MyprojectApplication : Started MyprojectApplication in 2.291 seconds (JVM running for 3.033)
執行定時任務---Thu Jul 26 16:48:30 CST 2018
執行定時任務---Thu Jul 26 16:48:45 CST 2018
執行定時任務---Thu Jul 26 16:49:00 CST 2018
四、注意事項
Cron表示式是一個字串,是由空格隔開的6或7個域組成,每一個域對應一個含義(秒 分 時 每月第幾天 月 星期 年)其中年是可選欄位。
但是,此處敲一下黑板,spring的schedule值支援6個域的表示式,也就是不能設定年,如果超過六個則會報錯。
其他詳細規則,大家可以自行百度,此處不贅述。
五、參考資料
相關推薦
Spring Boot學習(三):定時任務
一、簡介 專案中經常會遇到使用定時任務的情況,那麼SpringBoot如何實現這種需求呢,還是簡潔到要命。 二、環境準備 eclipse + maven + Spring Boot 三、程式碼示例 pom.xml檔案不用特殊引入依賴包,保持一般初始化就可以,如下
Spring Boot學習(三)
src pack art tin pre size -s script jar Spring boot實戰 —— Hello Word 1、創建maven項目 2、pom.xml文件 <?xml version="1.0" encoding="UTF-8"?>
Spring Boot學習(四):使用@SpringBootTest註解進行單元測試
一、簡介 專案中經常會遇到需要單元測試的情況,那麼SpringBoot如何實現這種需求,使用@SpringBootTest註解可以執行環境,測試後臺程式碼。 二、環境準備 eclipse + maven + Spring Boot 三、程式碼示例 pom.xml
Spring boot入門(三):SpringBoot整合結合AdminLTE(Freemarker),利用generate自動生成程式碼,利用DataTable和PageHelper進行分頁顯示
關於SpringBoot和PageHelper,前篇部落格已經介紹過Spring boot入門(二):Spring boot整合MySql,Mybatis和PageHelper外掛,前篇部落格大致講述了SpringBoot如何整合Mybatis和Pagehelper,但是沒有做出實際的範例,本篇部落格是連
Spring Boot 入門(三): 自動化配置實現
自動化配置實現 我們在上章編寫入門案例的時候,我們使用的是Spring Mvc 作為我們的表現層框架,但是我們都知道我們要使用Spring Mvc 我們就需要在web.xml檔案中配置Spring Mvc 的前端控制器DispatcherServlet。但是我們
Spring Boot學習(六):Spring Boot日誌管理
講Spring Boot日誌管理前,先看看目前有哪些常用的日誌框架吧。 我們熟悉的應該有:log4j, log4j2, logback, slf4j, 還有不太熟悉的,JUL, JCL, Jboss-logging... 具體的資料可以百度看一下。 這些日誌
spring boot學習(06):Redis 實現資料快取和 Session 共享
前言 前面我們學習了redis的基本使用,我們知道redis最常用的應用場景,就是資料快取和session共享,Spring Boot 針對這兩個場景都做了一些優化,讓我們在實際專案中使用非常的方便。 資料快取 使用 Redis 做為資料快取
Spring Boot學習(二):mybatis + druid + 多資料來源自動切換
一、簡介 閒言碎語不多說:專案中要用到多資料來源分別管理資料,主資料來源儲存正式資料,從資料來源儲存預載入的資料並完成預校驗。 二、環境準備 eclipse + maven + Spring Boot + mybatis + oracle 三、程式碼改造 pom
Spring Boot學習(十):Spring Boot 與快取
快取,我們應該已經很熟悉了。那麼今天就來學習一下Spring Boot中怎麼使用快取。 1、說起快取,先來了解下JSR107 首先什麼是JSR? JSR是Java Specification Requests 的縮寫 ,Java規範請求,故名思議提交
Spring Boot系列(三):Spring Boot整合Mybatis原始碼解析
一、Mybatis回顧 1、MyBatis介紹 Mybatis是一個半ORM框架,它使用簡單的 XML 或註解用於配置和原始對映,將介面和Java的POJOs(普通的Java 物件)對映成資料庫中的記錄。 2、Mybatis整體架構 二、Spring Boot整合Mybatis +
RabbitMQ學習(三):Spring整合RabbitMQ
1、maven依賴 <!-- rabbitMQ依賴 --> <!-- spring相關的其他依賴請參考原始碼,此處不做過多描述 --> <dependency>
vue移動音樂app開發學習(三):輪播圖組件的開發
hub out webapp width eth reat slot utc -1 本系列文章是為了記錄學習中的知識點,便於後期自己觀看。如果有需要的同學請登錄慕課網,找到Vue 2.0 高級實戰-開發移動端音樂WebApp進行觀看,傳送門。 完成後的頁面狀態以及項目結構如
Spring Boot學習(二)
div 自動 blog release width spring figure 學習 toc 基於Spring Boot創建的maven項目 1、application.properties或者application.yml:全局配置文件 作用:主要用來配置數據庫連接、日
Spring Boot學習(四)
自動配置 pat xml配置 XML 入口 spa ges auto classpath @SpringBootApplication 每一個Spring Boot項目都有一個名為*Application的入口類,入口類中有個main方法,在main方法中使用: Sprin
Spring-Boot學習(一)
圖片 public ram turn tps bind 實現 file clas 入門實例 - HelloWorld File > New > Spring Starter Project 項目創建完成: 這樣就完成了項目的創建,下面我們
PE檔案格式學習(三):匯出表
1.回顧 上篇文章中介紹過,可選頭中的資料目錄表是一個大小為0x10的陣列,匯出表就是這個陣列中的第一個元素。 我們再回顧下資料目錄表的結構體: struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress;  
Spring Cloud Config(三):基於JDBC搭建配置中心
1、簡介 本文主要內容是基於jdbc搭建配置中心,使應用從配置中心讀取配置資訊併成功註冊到註冊中心,關於配置資訊表結構僅供參考,大家可以根據具體需要進行擴充套件。 2、Config Server 搭建 2.1、Maven 依賴 因為需要從資料庫讀取配置檔案,所以需要新增M
TensorFlow學習(三):tf.reduce_sum()
壓縮求和 tf.reduce_sum( input_tensor, axis=None, keepdims=None, name=None, reduction_indices=None, keep_dims=None ) Args:
網頁開發學習(三):表單
表單是網頁中提供的一種互動式操作手段,無論是提交搜尋的資訊,還是網上註冊等都需要使用表單。使用者可以通過提交表單資訊與伺服器進行動態交流。表單主要可以分為兩部分:一是HTML原始碼描述的表單;二是提交後的表單處理,需要使用伺服器端編寫好 JSP等程式碼對客戶端提交的資訊作出迴應。
Spring MVC學習(三)
新建一個web project專案 嚴重: Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML docum