spring @scheduled动态配置,spring schedule详解
00-1010前言一、Spring @Scheduled Annotation1.2如何启用@Scheduled Annotation 1.3使用@Scheduled Annotation II、固定延迟和频率使用@Scheduled III、使用@Scheduled IV搭配cron表达式、使用属性文件配置Cron V、使用上下文配置Cron Summary
目录
Spring基于用@Scheduled注释的cron表达式,为任务调度和异步方法执行提供了出色的支持。您可以将@Scheduled注释和触发器元数据一起添加到方法中。在本文中,我将展示如何以4种不同的方式使用@Scheduled函数。
前言
@ scheduled注释用于任务调度。该注释需要提供触发信息。
您可以使用属性fixedDelay/fixedRate/cron来提供触发器信息。
FixedRate让Spring定期运行任务,即使最后一个调用还在运行。fixedDelay专门控制上一次执行结束时的下一次执行时间。Cron是从Unix cron实用程序派生出来的一个特性,根据您的需要有各种选项。示例用法如下:
@ Scheduled Usages @ Scheduled(fixed delay=30000)public void demoServiceMethod(){.} @ Scheduled(fixed rate=30000)public void demoServiceMethod(){.} @ Scheduled(cron= 0 0 * * * * public void demoServiceMethod(){.}
00-1010要在spring应用程序中使用@Scheduled,必须首先在applicationConfig.xml文件中定义xml名称空间和模式位置定义。还添加了任务:的注释驱动程序,以支持基于注释的任务调度。
application config . XML xmlns : task= http://www . spring framework . org/Schema/task http://www . spring framework . org/Schema/task/http://www . spring framework . org/Schema/task/spring-task-3.0 . xsd task 3360批注驱动上述添加是必要的,因为我们将使用基于批注的配置。
00-1010下一步是创建一个类和类中的一个方法,如下所示:
demo service . Java public class demo service { @ Scheduled(cron= */5 * * * *?)public void demoServiceMethod(){ system . out . println(每5秒执行一次的方法。当前时间是: 新日期());}}在上面的例子中
使用@Scheduled注释将使Spring容器理解下面的方法将作为作业运行。记住,带有@Scheduled注释的方法不应该有参数传递给它们。它们也不应该返回任何值。如果希望在@Scheduled方法中使用外部对象,应该使用自动连接将它们注入到DemoService类中,而不是将它们作为参数传递给@Scheduled方法。
00-1010在此方法中,fixedDelay属性与@Scheduled注释一起使用。
示例:
demoservicebasicusagefixeddelay . Java package com . howtodoinjava . service;导入Java . util . date;导入org . spring framework . scheduling . annotation . scheduled;公共类DemoServiceBasicUsageFixedDelay { nbsp;@ Scheduled(fixed delay=5000)nbsp;//@Scheduled(固定速率
= 5000) //Or use this public void demoServiceMethod() { System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date()); }}复制代码应用程序配置如下:
applicationContext.xml< ?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <task:annotation-driven /> <bean id="demoServiceBasicUsageFixedDelay" class="com.howtodoinjava.service.DemoServiceBasicUsageFixedDelay"></bean></beans>
三、配合cron表达式使用@Scheduled
在此方法中,cron 属性与@Scheduled 注释一起使用。
举例:
DemoServiceBasicUsageCron.javapackage com.howtodoinjava.service;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;public class DemoServiceBasicUsageCron{ @Scheduled(cron="*/5 * * * * ?") public void demoServiceMethod() { System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date()); }}
应用程序配置如下:
applicationContext.xml< ?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <task:annotation-driven /> <bean id="demoServiceBasicUsageCron" class="com.howtodoinjava.service.DemoServiceBasicUsageCron"></bean></beans>
四、使用properties文件配置Cron
在这个方法中,cron 属性与@Scheduled 注释一起使用。此属性的值必须是 cron 表达式,如前面的方法所示,但是,此 cron 表达式将在属性文件中定义,相关属性的键将用于@Scheduled 注释。
这将使 cron 表达式与源代码分离,从而使更改变得容易。
DemoServicePropertiesExample.javapackage com.howtodoinjava.service;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;public class DemoServicePropertiesExample { @Scheduled(cron = "${cron.expression}") public void demoServiceMethod() { System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date()); }}
应用程序配置如下:
applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <task:annotation-driven /> <util:properties id="applicationProps" location="application.properties" /> <context:property-placeholder properties-ref="applicationProps" /> <bean id="demoServicePropertiesExample" class="com.howtodoinjava.service.DemoServicePropertiesExample"></bean></beans>
五、使用context配置Cron
该方法在属性文件中配置 cron 表达式,在配置文件中使用 cron 表达式的属性键配置作业调度。主要的变化是您不需要在任何方法上使用@Scheduled 注释。方法配置也是在应用程序配置文件中完成的。
举例:
DemoServiceXmlConfig.javapackage com.howtodoinjava.service;import java.util.Date;public class DemoServiceXmlConfig{ public void demoServiceMethod() { System.out.println("Method executed at every 5 seconds. Current time is :: "+ new Date()); }}
应用程序配置如下:
applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context/ http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util/ http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/task/ http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <task:annotation-driven /> <util:properties id="applicationProps" location="application.properties" /> <context:property-placeholder properties-ref="applicationProps" /> <bean id="demoServiceXmlConfig" class="com.howtodoinjava.service.DemoServiceXmlConfig" /> <task:scheduled-tasks> <task:scheduled ref="demoServiceXmlConfig" method="demoServiceMethod" cron="#{applicationProps[cron.expression]}"></task:scheduled> </task:scheduled-tasks></beans>
总结
到此这篇关于Spring中@Scheduled功能使用的文章就介绍到这了,更多相关Spring@Scheduled使用内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。