1. 程式人生 > >Spring Boot學習(三):定時任務

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學習06Redis 實現資料快取和 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