spring 中配置定时调度两种方法介绍

方法一:

直接用jdk api的Timer类,无需配置spring文件

1、用@compent注解,实现InitializingBean接口 ,spirng会自动去查找afterPropertiesSet()方法,

2、在afterPropertiesSet方法中写业务实现,调用timer的schedule方法或者scheduleAtFixedRate方法

schedule(TimerTask task,
Date time)

安排在指定的时间执行指定的任务。

scheduleAtFixedRate(TimerTask task,
Date firstTime, long period)

安排指定的任务在指定的时间开始进行重复的固定速率执行

代码实现如下:

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

import javax.annotation.Resource;

import org.springframework.beans.factory.InitializingBean;

import org.springframework.stereotype.Component;

import com.cssweb.payment.account.service.support.AccountServiceSupport;

@Component

public class GetTimer implements InitializingBean{

private Date date;

@Override

public void afterPropertiesSet() throws Exception {

init();//初始化参数,每天凌晨00:00:00开始作业

//System.out.println("时间是:============="+date);

new Timer().schedule(test(), date);  //test()为自己要处理的业务实现方法

}

/**

* 初始化参数

*

*/

public void init(){

Calendar cal = Calendar.getInstance();

cal.set(Calendar.HOUR_OF_DAY, 0);

cal.set(Calendar.SECOND, 0);

cal.set(Calendar.MINUTE, 0);

cal.add(Calendar.DAY_OF_MONTH, 1);

date = cal.getTime();

}

public static TimerTask test(){

return new TimerTask() {

@Override

public void run() {

System.out.println(new Date()+"开始了------------------------------");

}

};

}

}

方法二:用spring配置文件进行配置

<?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:jee="http://www.springframework.org/schema/jee"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">

<bean id="remindSchedule" class="com.checking_in_remind.controller.Remind" />   //找到对应的类名

<!-- 定义调用对象和调用对象的方法(jobDetail) -->

<bean id="remindtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<!-- 注册定时任务执行时调用的类 -->

<property name="targetObject" ref="remindSchedule" />

<!-- 注册定时任务执行时调用的方法 -->

<property name="targetMethod" value="getPersonInfo" />

<!-- 此参数为false等于JobDetail对象实现了Stateful接口,jobs不会并发运行-->

<property name="concurrent" value="false" />

</bean>

<bean id="remindCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="remindtask" />

<!-- 每5分钟执行一次任务调度 -->

<property name="cronExpression" value="0 */5 * * * ?"/>

</bean>

</beans>

时间: 2024-12-10 16:08:14

spring 中配置定时调度两种方法介绍的相关文章

spring在xml文件中配置bean的三种方法

一.最常见,也是缺省,是调用spring的缺省工厂类 spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons() 配置文件中最普通最基本的定义一个普通bean<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" >

Spring 中获取 request 的几种方法,及其线程安全性分析

概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址.请求的url.header中的属性(如cookie.授权信息).body中的数据等.由于在Spring MVC中,处理请求的Controller.Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求时,能否保证不同请求/线程中使用不同的request对象.这里还有一个问题需要注意:前面所说的"在处理请

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

MySQL中删除数据的两种方法

转自:http://blog.csdn.net/apache6/article/details/2778878 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句. DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其

在Word中去除超链接的两种方法

本文来自e良师益友网 不少朋友都有这样一个疑问:在Word中输入网站地址,回车之后,先前输入的地址就自动转变为了蓝色的超链接,如果我们不想这样,该如何设置呢?下面,简单的介绍两种方法给大家参考. 方法一:运用自动更正选项 1.启动Word2003,在空白处直接输入网站地址之后,自动变为蓝色的超链接形式,我们仔细发现,首字母下有一道横线,光标移动至此,显示自动更正选项. 2.单击自动更正选项,有三个可供选择的,选择控制自动更正选项. 3.在键入时自动套用格式选项卡中,取消勾选Internet及网络

python中执行shell的两种方法总结

这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包均是Python现有的内置模块.需要的朋友可以参考借鉴,下面来一起看看吧. 一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: 该命令目前已经废弃,被s

C#读写txt文件的两种方法介绍 v

C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = new byte[100]; char[] charData = new char[1000]; public void Read() { try { FileStream file = new FileStream("E:\\test.txt", Fi

Endnote在latex中的应用的两种方法

从endnote中向latex文档批量插入参考文献的两种方法 一.若是latex模板中参考文献编写的命令是: \begin{thebibliography} \bibitem{lab1}LIU M L, ZHANG Y H,ZHOU X H et al. Phys. Rev. C, 2004, {\bf 70}: 14---34 ... \end{thebibliography} 我们可以按照bibitem行的格式在endnote中编写相应的outstyle,然后即可批量从endnote中输出参

从列表中提取数据的两种方法

从列表中提取数据除了循环外还有两种方法:过滤,列表解析式: #!/usr/bin/env python #coding:utf-8 #@Author:Andy # 生成一个随机列表:并选出其中的两大于零的数 from random import randint data = [randint(-10, 10) for i in range(1, 10)] print(data) # method 1 print("filter method:", list(filter(lambda