1. 在Java中如何设置一个定时任务,在每天的一个时间点自动执行一个特定的程序具体代码怎么写代码全点
Quartz定时机制
首先导入jar包到程序内 quartz-all-1.6.0.jar
然后创建一个XML
TimeConfig.xml 名字可以自己定义
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="mainTask" class="net.timed.MainTask"/> //你要执行的任务类
//jar类
<bean id="mainJob" class="org.springframework.scheling.quartz.">
<property name="targetObject">
<ref bean="mainTask"/>//将你的类添加到定时器当中
</property>
<property name="targetMethod">
<value>execute</value> //定时执行类里面的哪个方法
</property>
</bean>
<bean id="timeTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mainJob"/>
</property>
<!--
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
上面这个是quartz的语法 定时单位
-->
<property name="cronExpression">
<value>0 0/5 * * * ?</value> //定时的语法
</property>
</bean>
<bean id="sfb" class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref local="timeTrigger"/>
</list>
</property>
</bean>
</beans>
//下面这个类就是我在XML中引入的类
package net.timed;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainTask {
public void execute() throws IOException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("do my job"+dateFormat.format(new Date()));
Runtime.getRuntime().exec("cmd /c start E:/mbl/BusinessOffice/MoneDB/bin/bakup.bat");
}
}
然后在web.xml中把这个TimeConfig.xml添加进去作为监听
系统启动的时候自动就监听这个事件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
/WEB-INF/TimerConfig.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
这个是quartz spring的定时机制 请仔细的看看 如果可以请给分哦
2. javaweb,监听器和定时器(Quartz)互相调控的问题
不明白你为什么要这样设计程序
通常情况下监听器只是用来启动定时器,剩下的工作都是让定时器去处理
因为你想,你的定时器怎么启动起来的?
肯定是交给监听器去启动,例如servlet监听器,servlet容器一创建就执行,也就是服务器一启动就执行,这个时候你在监听器里开启一个定时器就做事就行了
接下来就是让你的定时器去定时 定时5秒去查询表A有没有数据如果有就处理就行了
定时器本身就是定时执行,因此不需要延时启动了
纯手工打字的,请采纳哈
3. 定时调度框架quartz可以定义单个触发器多个任务吗
单个触发器只能单个任务,单个任务可以多个触发器触发。
Quartz是一个用Java编写的任务调度框架,任务调度是什么,举例说明:比如需要在每个星期四下午三点时候发周报,我们需要一个系统在两点半的时候给一个发周报的提醒,这个提醒就是一次任务,每周星期四下午两点半的时候自动触发这个任务,这就可以理解为这个系统的一次任务调度。
Quartz 提供给定时调度已定义好的任务的能力,如果了解quartz的调度计划cronExpression表达式的配置,会感叹quartz的灵活与强大。
(3)quartzweb界面扩展阅读:
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。
启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。本篇文章中,会多次提到线程池管理,但Quartz里面的每个对象是可配置的或者是可定制的。
4. spring 4 quartz 2.x动态配置triggers
spring 4.x没有配置过,这里有一个spring 3.x 的quartz定时配置,你参考参考:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!--
1、JobDetail:JobDetail是一个具体的类。
2、Trigger:触发器,它用于定义Job何时执行。最常用的是SimpleTrigger和CronTrigger。
一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么SimpleTrigger比较合适;
如果你有许多复杂的作业调度,那么CronTrigger比较合适。
CronTrigger和Unix的cron机制基本一样,我们需要的只是一个cron表达式。
比如“0012**?”会在每天中午12点触发执行;“01510槐嫌?*6L”会在每个月的最后一个星期五的早上10:15触发Job执行。
铅态手3、Scheler和SchelerFactory:Scheler负责管理Trigger、调度Job,
SchelerFactory则是Scheler工厂,负责生成Scheler。
-->
<!--总管理类如果将lazy-init='false'那么容器启动就会执行调度程序-->
<beanclass="org.springframework.scheling.quartz.SchelerFactoryBean"lazy-init="false">
<!--通过属性配置spring上下文[此属性可省略]-->
<propertyname="">
<value>applicationContext</value>
</property>
<propertyname="triggers">
<list>
<!--作业调度器,list下可加入其他的调度器-->
<refbean="testTrigger"/>
</list>
</property>
<propertyname="autoStartup"value="true"/>
</bean>
<!--要调度的对象-->
<beanid="testJob"class="name.zealze.test.JobTest"/>
<beanid="testTrigger"class="org.springframework.scheling.quartz.CronTriggerBean">
<propertyname="jobDetail"ref="testJobDetail"/>
<!--按cron表达式时间点触发事件http://cron.qqe2.com/-->
<propertyname="cronExpression"value="00/2***?"/>
</bean>
<beanid="testJobDetail"class="org.springframework.scheling.quartz.">
<propertyname="targetObject"ref="testJob"/>
<propertyname="targetMethod"value="execute"/>
<!--是否允许任务闭销并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程-->
<propertyname="concurrent"value="false"/>
</bean>
</beans>