Preface
Speaking of scheduled tasks, development partners are definitely familiar with them. Some things always need computers to do it, rather than just doing it on our own. However, many people are always unfamiliar with timers. Today, I will take my friends to unveil its mystery and explain how spring uses squertz to implement scheduled tasks.
1. Required Jar
quartz-1.8.5.jar commons-logging.jar spring-core-3.0.5.RELEASE.jar spring-beans-3.0.5.RELEASE.jar spring-context-3.0.5.RELEASE.jar spring-context-support-3.0.5.RELEASE.jar spring-asm-3.0.5.RELEASE.jar spring-expression-3.0.5.RELEASE.jar spring.transaction-3.0.5.RELEASE.jar spring-web-3.0.5.RELEASE.jar
2. Configuration file
Configure here when you want to execute your Scheduled tasks, what method is executed, for example, the following is the generate method of com.seewoedu.train.quartz.GenerateRewardListTask executed at 2016.11.10 23:00:00, where cron is used to specify the execution time
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 启动触发器的配置开始 --> <bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="myJobTrigger" /> </list> </property> </bean> <!-- 启动触发器的配置结束 --> <!-- quartz-2.x的配置 --> <bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="myJobDetail" /> </property> <property name="cronExpression"> <!--<value>10 0/1 * * * ?</value>--> <!-- Cron表达式“10 */1 * * * ?”意为:从10秒开始,每1分钟执行一次。 --> <value>0 0 9 10 12 ? 2016</value> <!-- Cron表达式“0 0 23 10 11 ? 2016”意为:只在2016.11.10 23:00:00 执行。 --> </property> </bean> <!-- 调度的配置结束 --> <!-- job的配置开始 --> <bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="myJob" /> </property> <property name="targetMethod"> <value>generate</value> </property> </bean> <!-- job的配置结束 --> <!-- 工作的bean --> <bean id="myJob" class="com.seewoedu.train.quartz.GenerateRewardListTask" /> </beans>
3. Methods to be executed
public class GenerateRewardListTask { @Autowired private GiftReceiveRecordService giftReceiveRecordService; org.slf4j.Logger logger = LoggerFactory.getLogger(GenerateRewardListTask.class); public void generate() throws Exception { giftReceiveRecordService.generateRewardMember(); //执行的方法 } }
4. Issues that need attention
1. When the execution time is specified to the year, there will be a problem, that is, when you When you start the project after this time, it will always report a memory leak error, which probably means that your scheduled tasks will never be executed, causing the project to never start.
2. Scheduled tasks are implemented by calculating the time interval between when you deploy the project and when you want to execute the scheduled task, rather than by obtaining your server time in real time. Therefore, you want to test whether the scheduled task takes effect by modifying the server time. is not feasible.
Summary
The above is the entire content of this article. I hope the content of this article can bring some help to everyone's study or work. If you have any questions, you can leave a message to communicate.
For more spring-related articles using squertz to implement scheduled tasks, please pay attention to the PHP Chinese website!