一.java.util.timer类(一般不用它)
首先在web.xml中配置listener监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 可以用来启动schelduledExcutorsService 或 timer -->
<listener>
<listener-class>com.timer.TimerListener</listener-class>
</listener>
</web-app>
然后在com.timer包下创建TimerListener.java
package com.timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.scheldule.SchelduCall;
import java.util.*;
public class TimerListener implements ServletContextListener {
private Timer timer;
public TimerListener(){
System.out.println("执行TimerListener构造函数");
}
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("destory listener");
timer.cancel();
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("init listener");
timer = new Timer(); //可以使用timer
timer.schedule(new TopicTask(), 0, 20*1000); //服务器启动时就执行一次
new SchelduCall().scheldul(); //可以调用scheldul()方法
}
}
任务类:topicTask.java
package com.timer;
import java.util.*;
public class TopicTask extends TimerTask{
public void run() {
System.out.println("task:"+new Date());
}
}
然后启动服务器就能循环执行任务了。
二.使用类java.util.concurrent.ScheduledExecutorService;
首先建立SchedulCall.java
package com.scheldule;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class SchelduCall {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public static void main(String[] args) throws Exception{
new SchelduCall().scheldul();
}
public void scheldul(){
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 5, 7, TimeUnit.SECONDS); //过五秒后开始执行,然后循环7秒执行一次
scheduler.schedule(new Runnable() { //第27秒后执行
public void run() {
beeperHandle.cancel(true);
System.out.println("stop");
}
}, 27, TimeUnit.SECONDS);
//scheduler.shutdown();
}
}
然后再TimerListener中调用即可
三.自然要属任务调度框架quartz
1.首先在web.xml文件中加入 如下内容(根据自己情况设定)
在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 使用监听器初始化quartz -->
<!-- <context-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</context-param>
<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
-->
<!-- 在servlet中初始化 -->
<servlet>
<servlet-name>
QuartzInitializer
</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
2、quartz.properties文件的配置(各项属性说明下次写),内容如下:
上面提到了quartz.properties,这是自行指定的,Quartz提供了一个默认的配置文件,可以满足基本的j2se应用,如果在
web应用中,我们想把job,trigger配置都写到文件中,就需要自己来写,并指定在初始化时加载我们自己的quratz.properties,
位置放在classes下。
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
3、 quartz_job.xml文件配置(各项属性说明下次写),内容如下:
quartz要使用插件来加载自己的xml配置文件,上面指定加载classes\quartz_job.xml文件。
我写了3个类Job
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-detail>
<name>listener3</name>
<group>group1</group>
<job-class>SimpleQuartzJob</job-class>
</job-detail>
<trigger>
<cron>
<name>hello3</name>
<group>group1</group>
<job-name>listener3</job-name>
<job-group>group1</job-group>
<cron-expression>0/1 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
<job>
<job-detail>
<name>listener1</name>
<group>group1</group>
<job-class>com.web.config.Job1</job-class>
</job-detail>
<trigger>
<cron>
<name>hello</name>
<group>group1</group>
<job-name>listener1</job-name>
<job-group>group1</job-group>
<cron-expression>0/10 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
<job>
<job-detail>
<name>listener2</name>
<group>group2</group>
<job-class>com.web.config.Job2</job-class>
</job-detail>
<trigger>
<cron>
<name>hello2</name>
<group>group2</group>
<job-name>listener2</job-name>
<job-group>group2</job-group>
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
给一个com.web.config下的Job1.java
package com.web.config;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Job1 implements Job {
public Job1() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("job1-" + new Date());
}
}
其他可以写自己的业务逻辑
还可以使用quartz包中的方法配置jobdetail,trigger
package com.quartz;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
/*
* 使用类调用。直接运行
* */
public class FirstDemo {
public void run() throws SchedulerException{
// 创建调度者工厂
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// 用工厂创建一个调度者
Scheduler scheduler = schedulerFactory.getScheduler();
// 利用 Quartz 提供的 getNextGivenSecondDate 返回一个当前时间四舍五入的 5 的倍数时间
long ts = TriggerUtils.getNextGivenSecondDate(null, 5).getTime();
// 创建一个工作,并命名为‘job1’,放入‘group1’组中,HellowWorl 是在此工作中需要执行的类
JobDetail jobDetail = new JobDetail("job1","mygroup",HelloWorld.class);
// 创建一个触发器,并命名为‘trigger1’,将此触发器设置在 ‘job1’ 上 ,并设置什么情况下启动
SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1","job1", new Date(ts), null, -1, 1000L);
// 将 ‘job1’ 加入调度者中,
scheduler.scheduleJob(jobDetail, simpleTrigger);
// 开始运行调度程序
scheduler.start();
// 停止调度程序
// scheduler.shutdown(true);
}
public static void main(String[] args) throws SchedulerException {
FirstDemo example = new FirstDemo();
example.run();
}
}
以上有些是拿着前辈的demo,我整合一下。前辈看到勿怪
。
最后给一个包含3种方式的demo.
分享到:
相关推荐
J2EE项目开发总结J2EE项目开发总结
j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档j2ee中文帮助文档
它包括了组成J2EE平台的技术以及描述如何开发J2EE组件并部署在J2EE软件开发包上。 这篇指南不是为J2EE服务器及工具供应商准备的,它没有解释如何实现J2EE结构,也没有解释J2EE软件包。J2EE规范描述了J2EE结构并可以...
最近做了个线程,主要是在j2ee的运用的 个人觉得比较基础,仅供大家参考
工作5年J2EE经验文档总结, 文档包括69个J2EE相关文档 Extjs学习笔记 hibernate总结 J2EE经验总结 j2ee学习总结 JAVA经典总结 spring经验总结 struts2标签库总结 Spring_AOP_学习小结 自己总结的spring ...
j2ee6中文规范j2ee6中文规范j2ee6中文规范j2ee6中文规范
J2EE中MVC三层架构的实现 1、课堂实践内容: JSP+持久层结构存在的问题 解决方法 J2EE的MVC架构(持久层+Jsp+Servlet) 图书列表功能MVC实现 图书修改功能MVC实现
j2ee的个人简单总结,主要是针对基础的汇总。
J2EE 指南对于广大的Java 程序员来说是一份不可或缺的资料了。这篇导论对于初次碰到J2EE 的程序员来说有着同样的作用。它与Java 指南一样都是一例子为中心。
J2EE体系结构图或三层结构图
主要描述了J2EE的十三种技术(规范).doc
J2EE开发使用手册(PDF)
J2EE中的13种技术规范;
j2ee Filter使用原理本代码里面首先是介绍了Filter实现的原理,然后模拟的了j2ee项目中Filter的使用原理,然后由此又延伸了Struts2的Interceptor实现原理,并且给予了详细的注释。
j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee
j2ee课程重点总结,用于考试时复习重点用!
J2EE开发使用手册:J2EE为开发企业级的多层应用程序和复杂的企业系统定义了一套API。针对各种各样的企业需求,本书试图通过J2EE解决所有的企业问题。全书共分六大部分30章,分别从企业面临的问题、企业数据的表示、...
JSP+持久层结构存在的问题 解决方法 J2EE的MVC架构(持久层+Jsp+Servlet) 图书列表功能MVC实现 图书修改功能MVC实现
J2EE软件工程师全部培训课程总结J2EE软件工程师全部培训课程总结