https://www.cnblogs.com/FlyHeLanMan/p/6428878.html
http://t.zoukankan.com/liuchao102-p-6064819.html
第一步,修改spring.xml配置文件
在xsi:schemaLocation中加入
1 http://www.springframework.org/schema/task 2 http://www.springframework.org/schema/task/spring-task-3.2.xsd
同时加入
1 xmlns:task=”http://www.springframework.org/schema/task
第二步,开启task注解
1
第三步,编写作业类,并在作业类中加入注解
springmvc定时springtask定时任务quarze自动注入时间配置@value@PropertySourceCron配置注入配置 - 图1
1 @Component(“myTask”) 2 @Lazy(false) 3 public class MyTask { 4 5 @Scheduled(cron=”0/5 ?”) 6 public void run(){ 7 SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); 8 System.out.println(sdf.format(new Date()) + “定时任务执行”); 9 } 10 }
springmvc定时springtask定时任务quarze自动注入时间配置@value@PropertySourceCron配置注入配置 - 图2
注意:使用Lazy注解是因为spring 配置文件采用懒加载的原因default-lazy-init=”true” 这个配置会导致 @Scheduled失效
————————————————————————
项目框架: SpringMVC、MyBatis、JSP

  1. 首先配置spring.xml文件

<?xml version=”1.0” encoding=”UTF-8”?>
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance"](http://www.w3.org/2001/XMLSchema-instance")
xmlns:context=”http://www.springframework.org/schema/context”
xmlns:task=”http://www.springframework.org/schema/task”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd”>

  1. <!-- 注解定时任务 --><br /> <task:annotation-driven/><br />2. 配置定时任务类

@Component
public class MessageSendService {

  1. /**<br /> * 记录日志类<br /> */<br /> public Log logger = LogFactory.getLog(this.getClass());
  2. /**<br /> * 定时任务方法<br /> */<br /> @Scheduled(cron = "0/10 * * * * ? ")<br /> public void send(){<br /> logger.info("start.....");<br /> }

}
@Component 注解是让Spring可以扫描到并初始化,第一步的配置就是做这个用的

@Scheduled 注解是配置定时任务的执行时间,上面的配置是让定时任务每10执行一次send()方法

  1. 实际的项目中定时任务的执行时间可能要在配置文件中配置,就需要用到另一个注解 @PropertySource

@Component
@PropertySource(value=”classpath:application.properties”)
public class MessageSendService {

  1. /**<br /> * 记录日志类<br /> */<br /> public Log logger = LogFactory.getLog(this.getClass());
  2. /**<br /> * 方法<br /> */<br /> @Scheduled(cron = "${jobs.message}")<br /> public void send(){<br /> logger.info("start.....");<br /> <br /> }

}
@PropertySource 指定配置文件的位置,和配置文件的名称

@Scheduled 注解做相应的修改

  1. application.properties 文件配置

轮询时间配置
jobs.message=0/10 ?
这个定时任务时间配置和linux的crontab差不多

  1. Scheduled 参数1

@Scheduled(fixedDelay = 5000)
public void doSomething() {
// something that should execute periodically
}
这个方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在上一个任务完成之后,5s后再次执行

当方法执行超过5秒,下一个轮询发现有正在执行的方法,直接跳过

  1. Scheduled 参数2

@Scheduled(fixedRate = 5000)
public void doSomething() {
// something that should execute periodically
}
这个方法将以一个固定速率5s来调用一次执行,这个周期是以上一个任务开始时间为基准,从上一任务开始执行后5s再次调用

当方法执行时间超过5秒,下一个轮询会阻塞,上一个任务执行完成,立即执行此次轮询方法

—————最后说明一下上面用到的注解问题———————-
TaskTime.java
@Component
public class TaskTime {
@Autowired
TaskGh taskGh;
@Scheduled(cron = “${tasktime.cron_gh}”)
public void taskGh() throws InterruptedException {
taskGh.getData();
}

}

applicationConfig.propertieswe文件中的 tasktime.cron_gh=0 24 14 ?
1.@PropertySource(“classpath:config/applicationConfig.properties“),可以读取到文件,如果文件不对,会提示错误,但@Scheduled(cron = “${tasktime.crongh}”) 或者 @Value(“${tasktime.cron_gh}”) 都不能获取到值,但是在controller中就可以,_TaskTime这个就是获取不到
2.最终解决:在springmvc的配置文件中设置该路径解决,property-placeholder location 多个文件逗号分隔

  1. <!-- 配置数据源 --><br /> <bean name="dataSource_hbz" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><br /> <property name="url" value="${jdbc_url}"/><br /> <property name="username" value="${jdbc_username}"/><br /> <property name="password" value="${jdbc_password}"/>
  2. <!-- 初始化连接大小 --><br /> <property name="initialSize" value="${initialSize}"/><br /> <!-- 连接池最大使用连接数量 --><br /> <property name="maxActive" value="${maxActive}"/><br /> <!-- 连接池最小空闲 --><br /> <property name="minIdle" value="${maxIdle}"/><br /> <!-- 获取连接最大等待时间 --><br /> <property name="maxWait" value="${maxWait}"/>
  3. <br /> </bean>

——-springtask 修改 springmvc.xml
xmlns:task=”http://www.springframework.org/schema/task”
xsi:schemaLocation=”
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd”
default-init-method=”init”>