通过spring 配置 @Scheduled定时任务

以前框架使用quartz框架执行定时调度问题、

这配置太麻烦、每个调度都需要多加在spring的配置中、

首先要配置我们的spring.xml

 

xmlns 多加下面的内容、

Java代码   收藏代码
  1. xmlns:task="http://www.springframework.org/schema/task"  

 然后xsi:schemaLocation多加下面的内容、

Java代码   收藏代码
  1. http://www.springframework.org/schema/task  
  2. http://www.springframework.org/schema/task/spring-task-3.1.xsd  

 最后是我们的task任务扫描注解

Java代码   收藏代码
  1. <task:annotation-driven/>  

 我的配置扫描位置是:

Java代码   收藏代码
  1. <context:annotation-config/>  
  2.  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  
  3. <context:component-scan base-package="com.test"/>  

 扫描的是com.test这样的包下的内容、

下面需要接口和实现(我的这几个java文件都是com.test的包下的、)

[java]  view plain copy
 
  1. public interface IMyTestService {  
  2.        public void myTest();  
  3. }  



 

 

 

[java]  view plain copy
 
  1. @Component  //import org.springframework.stereotype.Component;  
  2. public class MyTestServiceImpl  implements IMyTestService {  
  3.       @Scheduled(cron="0/5 * *  * * ? ")   //每5秒执行一次  
  4.       @Override  
  5.       public void myTest(){  
  6.             System.out.println("进入测试");  
  7.       }  
  8. }  

执行后控制台就会打印出   进入测试   了

需要注意的几点:

1、spring的@Scheduled注解  需要写在实现上、

2、 定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true、具体就去百度google吧)

3、实现类上要有组件的注解@Component

 

剩下的就是corn表达式了、具体使用以及参数请百度google、

下面只例出几个式子

CRON表达式    含义 
"0 0 12 * * ?"    每天中午十二点触发 
"0 15 10 ? * *"    每天早上10:15触发 
"0 15 10 * * ?"    每天早上10:15触发 
"0 15 10 * * ? *"    每天早上10:15触发 
"0 15 10 * * ? 2005"    2005年的每天早上10:15触发 
"0 * 14 * * ?"    每天从下午2点开始到2点59分每分钟一次触发 
"0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发 
"0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 
"0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发 
"0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发 
"0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发


一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为
秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?


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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!-- Spring Task -->
    <context:annotation-config />
    <context:component-scan    base-package="com.ucmed.common.web" />
    <!-- <context:component-scan    base-package="com.ucmed.common.task" /> -->
    <task:annotation-driven />
    <context:component-scan    base-package="com.ucmed.common.task" />
    
    <!-- load for annotation use, must be here -->
    <context:property-placeholder location="classpath*:configure.properties" />
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/admin/*.htm" />
            <bean class="com.ucmed.common.filter.AdminPermissionInterceptor">
                <property name="rolePermissions" ref="rolePermissions" />
            </bean>
        </mvc:interceptor>
        <!-- flow record for /**/*.htm path -->
        <mvc:interceptor>
            <mvc:mapping path="/**/*.htm" />
            <bean class="com.ucmed.common.filter.FlowInterceptor">
                <property name="flowService" ref="flowService" />
                <property name="rolePermissions" ref="rolePermissions" />
                <property name="permissionService" ref="permissionService" />
                <property name="cacheManager" ref="cacheManager" />
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

    <!-- HandlerMapping -->
    <bean class="org.jpxx.sense.servlet.handler.SenseAnnotationHandlerMapping" />
    <bean class="org.jpxx.sense.servlet.handler.TileAnnotationHandlerMapping" />

    <!-- HandlerAdapter -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
    <bean class="org.jpxx.sense.servlet.handler.TileAnnotationMethodHandlerAdapter" />
    
    <!-- ================事务相关控制=================== -->
    <bean id="transactionManager"    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 全注解控制事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
Java代码:

@Service
public class GetDoctorInfoTask {

    private static final Logger LOG = Logger
            .getLogger(userDateLoginNumTask.class);

    @Autowired
    private GetHospitalDataUtil getHospitalDataUtil;
    
    @Autowired
    private DoctorService doctorService;

    @Scheduled(cron = "0 0 1 * * ?")
    public void userLoginTime() {

             //业务逻辑代码

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值