java中定时执行任务
2015-12-23 13:31
381 查看
java定时实现启动任务
1、Timer+TimerTask
(1)建立MyTask类继承TimerTask
public class MyTask extends TimerTask { @Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(" Hello world ----Timetask"); }}(2)建立监听器,如果是服务器启动就掉用该方法,则需要实现ServletContextListener上下文监听器的接口。
public class MyListenner implements ServletContextListener { private Timer timer=null;@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stubtimer.cancel();}@Overridepublic void contextInitialized(ServletContextEvent arg0) {// TODO Auto-generated method stubtimer=new Timer(true);//设置任务计划,启动和间隔时间timer.schedule(new MyTask(), 0, 2000);}}
(3)在web.xml文件中进行配置监听器
<!-- 设置定时启动监听器 Timer+TimerTask --> <listener><listener-class>spring.study.timetest.MyListenner</listener-class>
</listener>(4)如果要实现业务逻辑,则需要在MyTask中封装方法,进行调用即可。
2、Spring+quartz
Maven项目中加入quartz.jar,具体步骤如下:(1)pom.xml文件添加 <!-- 定时任务 --> <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version> </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"/>
<!--false表示等上一个任务执行完后再开启新的任务-->
<property name="concurrent" value="false"/>
<property name="targetObject">
<ref bean="helloTaskJob"></ref>
</property>
<property name="targetMethod">
<value>sayHello</value>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="helloTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="helloJobDetail"/>
</property>
<!-- 每天的8点到21点每隔1分钟触发-->
<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 {@Autowiredprivate 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
1、Timer+TimerTask
(1)建立MyTask类继承TimerTask
public class MyTask extends TimerTask { @Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(" Hello world ----Timetask"); }}(2)建立监听器,如果是服务器启动就掉用该方法,则需要实现ServletContextListener上下文监听器的接口。
public class MyListenner implements ServletContextListener { private Timer timer=null;@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stubtimer.cancel();}@Overridepublic void contextInitialized(ServletContextEvent arg0) {// TODO Auto-generated method stubtimer=new Timer(true);//设置任务计划,启动和间隔时间timer.schedule(new MyTask(), 0, 2000);}}
(3)在web.xml文件中进行配置监听器
<!-- 设置定时启动监听器 Timer+TimerTask --> <listener><listener-class>spring.study.timetest.MyListenner</listener-class>
</listener>(4)如果要实现业务逻辑,则需要在MyTask中封装方法,进行调用即可。
2、Spring+quartz
Maven项目中加入quartz.jar,具体步骤如下:(1)pom.xml文件添加 <!-- 定时任务 --> <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version> </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"/>
<!--false表示等上一个任务执行完后再开启新的任务-->
<property name="concurrent" value="false"/>
<property name="targetObject">
<ref bean="helloTaskJob"></ref>
</property>
<property name="targetMethod">
<value>sayHello</value>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="helloTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="helloJobDetail"/>
</property>
<!-- 每天的8点到21点每隔1分钟触发-->
<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 {@Autowiredprivate 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
相关文章推荐
- Java中的线程池——Executor框架
- Struts2文件上传
- Java泛型
- Java对于Xml文件的读取
- 56.Java与js交互
- 57.动态添加子View(Java/XML两种方式)
- java开发俄罗斯方块学习笔记 Day-7 多态
- java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱
- java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱
- Struts2和Struts1对比
- SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇日期格式转化报400错误解决方法
- ehcache缓存的使用
- [Java]Java工程师成神之路
- Java使用MyEclipse构建webService简单案例
- OSGI环境下的一个错误:javax.xml.bind.JAXBException: ClassCastException
- eclipse maven project 'X' is missing required java project 'Y' soultioin
- Android studio 导入Eclipse项目 Vitamio播放器报错
- Spring与Hibernate整合报错:unable to get the default bean validation
- Spring学习(五)——Spring注解(一)
- Java的内存机制