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.servlet.context.AnnotationConfigServletWebServerApplicationContext@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.servlet.context.AnnotationConfigServletWebServerApplicationContext@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个域的表达式,也就是不能设定年,如果超过六个则会报错。

其他详细规则,大家可以自行百度,此处不赘述。

五、参考资料

猜你喜欢

转载自blog.csdn.net/xxfamly/article/details/81219611