java定时实现启动任务
1、Timer+TimerTask
(1)建立MyTask类继承TimerTask
public class MyTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(" Hello world ----Timetask");
}
}
(2)建立监听器,如果是服务器启动就掉用该方法,则需要实现ServletContextListener上下文监听器的接口。
public class MyListenner implements ServletContextListener {
private Timer timer=null;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
timer.cancel();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
timer=new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 2000);
}
}
(3)在web.xml文件中进行配置监听器
<listener>
<listener-class>spring.study.timetest.MyListennerlistener-class>
listener>
(4)如果要实现业务逻辑,则需要在MyTask中封装方法,进行调用即可。
2、Spring+quartz
Maven项目中加入quartz.jar,具体步骤如下:
(1)pom.xml文件添加
<dependency>
<groupId>org.quartz-schedulergroupId>
<artifactId>quartzartifactId>
<version>2.2.1version>
dependency>
(2)新建类(执行任务类,现在仅仅是一个测试,就打印出helloworld吧)
public class HelloWorld {
public void sayHello(){
System.out.println("Hello World!");
}
}
(3)在spring配置文件中配置
具体分为3步:
<1>、在配置信息中SchedulerFactoryBean定义了多个触发器,在启动Spring后,就是从这个配置获取到触发器。
<2>、触发器是通过CronTriggerBean来配置,它设置了任务类和任务启动的时间
<3>、MethodInvokingJobDetailFactoryBean是任务类的配置,设置了执行任务的对象是那个Bean和需要执行这个Bean的那个方法。
配置文件具体如下:
<bean id="helloTaskJob" class="spring.study.timetest.HelloWorld">bean>
<bean id="helloJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="group" value="job_work"/>
<property name="name" value="job_work_name"/>
<property name="concurrent" value="false"/>
<property name="targetObject">
<ref bean="helloTaskJob">ref>
property>
<property name="targetMethod">
<value>sayHellovalue>
property>
bean>
<bean id="helloTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="helloJobDetail"/>
property>
<property name="cronExpression">
<value>0 * 08-21 * * ?value>
property>
bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="helloTrigger" />
list>
property>
bean>
(4)启动Tomcat即可实现每分钟打印一条Hello World。
(5)Quartz与具体实现业务相联系,怎么实现?(Spring中)
在具体业务相联系的话,基本上都不是只执行一条静态语句那么简单,可以在具体调用类中实现业务逻辑实现即可,只需要改动执行类,也就是上面的HelloWorld类,具体变化如下(只是举个简单例子):
public class HelloWorld {
@Autowired
private PeopleDao peopleDao;
public void setPeopleDao(PeopleDao peopleDao) {
this.peopleDao = peopleDao;
}
public PeopleDao getPeopleDao() {
return peopleDao;
}
@Transactional
//具体写业务实现即可
public void sayHello(){
People people=peopleDao.getPerson(2);
System.out.println(people.getSchoolName());
System.out.println("Hello World!");
}
}
参考:http://blog.csdn.net/52rainbow/article/details/4004206