通过spring 配置@Scheduled定时任务

来源:互联网 发布:网络管理及其功能 编辑:程序博客网 时间:2024/06/09 15:23

以前框架使用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 plaincopy
 
  1. public interface IMyTestService {  
  2.        public void myTest();  
  3. }  



 

 

 

[java] view plaincopy
 
  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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5d轻轻泥干了怎么办 手机炉石一直闪退怎么办 鸟之羽任务失败怎么办 巫师3没血没药怎么办 荣威rx5灯光不亮怎么办 点滴打没了回血怎么办 加了低标号的油怎么办 别克车钥匙丢了怎么办 霜子哀伤断了怎么办 侧车窗外有雨水怎么办 昂科威15t变速箱异响怎么办 别克昂科拉一公里9毛怎么办? 雷诺科雷傲车钥匙丢了怎么办 奥迪a6l烧机油了怎么办 卡地亚手镯刮花怎么办 卡地亚戒指花了怎么办 手表摔了不走了怎么办 ck手表表扣很难打开怎么办 小天才泡了水怎么办 小天才手表掉水里了怎么办 小天才电话手表进水了怎么办 小天才手表进水了怎么办 小天才电话手表丢了怎么办 小天才电话手表黑屏怎么办 安全守护注册码忘记了怎么办 儿童安全锁的门打不开怎么办 守护宝老年机打不开了怎么办 小米电话手表坏了怎么办 小米手表带坏了怎么办 小米电话手表屏幕坏了怎么办 雷诺梅甘娜06款系统错乱怎么办 轿车碰了一个坑怎么办 车子卖了没过户怎么办 9岁儿童肠胃痉挛怎么办 鹿角胶水放多了怎么办 打胰岛素血糖还是高怎么办 血糖高打胰岛素降不下去怎么办 儿童低烧37度1怎么办 小孩发烧一会冷一会热怎么办 月子里得的风湿怎么办 腰窝中间凸起肉怎么办