⑴ 怎样用java做个定时器,每个星期一中午12点整执行doXX这一动作。越详细越好.用监听哥跪谢!
主类:
package tiwen4; import java.util.Calendar; import java.util.Timer; public class quartz { public static void main(String[] args) { try{ Calendar cal = Calendar.getInstance();//设置定时时间 cal.add(Calendar.DATE, 0);//表示从今天的12点开始跑起来,如果当前时间超过12点会马上跑一次,否则等12点再跑第一次 cal.set(Calendar.HOUR_OF_DAY, 12);//24小时制的,12就是中午12点 cal.set(Calendar.MINUTE, 0);//分 cal.set(Calendar.SECOND, 0);//秒 Timer processTimer = new Timer(); processTimer.scheleAtFixedRate(new ProcessClass(), cal.getTime(), 86400000);//86400000是24小时,即24小时跑一次 }catch(Exception e){ e.printStackTrace(); }finally{ } } }
定时器调用的类--我在这里只是输出了一下~你也可以自己加函数:
package tiwen4; import java.util.TimerTask; public class ProcessClass extends TimerTask { @Override public void run() { // TODO Auto-generated method stub System.out.println("输出了哈哈");// } }
我上面用的只是一种方式,其实定时方式有很多的linux和window都有自带的定时器,可以直接调用,也可以用上面所说的quartz包带的框架等等
⑵ spring如何使用quartz定时,8:30到19:00,每10分钟执行一次,支持这种设置吗参
为了实现从8:30到19:00每10分钟执行一次的任务,可以采用一种策略,即设定多个定时器来实现连续执行的需求。具体步骤如下:
首先,创建一个定时器,设定在8:29开始启动,执行8:30开始的任务。这个任务可以是一个简单的触发器,用于启动后续的定时任务。接着,设置一个定时器,从8:30开始,每10分钟执行一次。这个任务可以是一个具体的业务逻辑处理,比如数据更新、日志记录等。最后,设定一个定时器,在19:00开始,每天执行一次,用于停止之前的定时任务。这样就可以实现8:30到19:00之间每10分钟执行一次任务的需求。
在Spring中,可以使用Quartz来实现这种定时任务。首先,在Spring配置文件中配置Quartz的相关信息,比如数据源、JobDetail、Trigger等。然后,定义JobDetail,设置任务的类路径和参数。接着,定义Trigger,设置触发器的名称、组名、开始时间、重复策略等信息。最后,在业务逻辑中启动Quartz的Scheler,通过配置好的JobDetail和Trigger来执行定时任务。
Quartz提供了丰富的触发器类型,比如SimpleTrigger和CronTrigger。对于这种每10分钟执行一次的任务,可以使用SimpleTrigger。而对于8:30到19:00之间的时间段控制,可以使用CronTrigger来实现。通过Cron表达式,可以精确地设置任务的执行时间。例如,使用Cron表达式"30 30-59 8 * * ?"可以实现8:30开始的任务,而"0 0 19 * * ?"可以实现19:00结束的任务。
通过这种方式,可以灵活地设置定时任务的执行时间和频率,满足不同的业务需求。Quartz提供了丰富的功能和灵活的配置方式,使得定时任务的实现更加便捷和高效。
需要注意的是,在配置定时任务时,要确保任务的并发性和线程安全,避免多个任务同时执行导致的数据不一致问题。可以通过设置Quartz的相关属性,如concurrent和overwriteExistingTriggers,来控制任务的并发执行。
总之,通过合理地配置Quartz的定时任务,可以实现从8:30到19:00每10分钟执行一次的任务需求。这种方法不仅简单易懂,而且能够满足实际业务场景中的各种复杂需求。
⑶ 在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的定时机制 请仔细的看看 如果可以请给分哦
⑷ java quartz job 执行时间配置
第一步:引包
要使用Quartz,必须要引入以下这几个包:
1、log4j-1.2.16
2、quartz-2.1.7
3、slf4j-api-1.6.1.jar
4、slf4j-log4j12-1.6.1.jar
这些包都在下载的Quartz包里面包含着,因此没有必要为寻找这几个包而头疼。
第二步:创建要被定执行的任务类
这一步也很简单,只需要创建一个实现了org.quartz.Job接口的类,并实现这个接口的唯一一个方法execute(JobExecutionContext arg0) throws JobExecutionException即可。如:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class myJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(new Date()));
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class myJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(new Date()));
}
}
这个例子很简单,就不用解说了。
第三步:创建任务调度,并执行
这一步应该算是最难的一步的,但其实是非常简单的,直接上代码
import static org.quartz.CronScheleBuilder.cronSchele;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheler;
import org.quartz.SchelerFactory;
import org.quartz.impl.StdSchelerFactory;
public class Test {
public void go() throws Exception {
// 首先,必需要取得一个Scheler的引用
SchelerFactory sf = new StdSchelerFactory();
Scheler sched = sf.getScheler();
//jobs可以在scheled的sched.start()方法前被调用
//job 1将每隔20秒执行一次
JobDetail job = newJob(myJob.class).withIdentity("job1", "group1").build();
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchele(cronSchele("0/20 * * * * ?")).build();
Date ft = sched.scheleJob(job, trigger);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: " + trigger.getCronExpression());
// job 2将每2分钟执行一次(在该分钟的第15秒)
job = newJob(myJob.class).withIdentity("job2", "group1").build();
trigger = newTrigger().withIdentity("trigger2", "group1").withSchele(cronSchele("15 0/2 * * * ?")).build();
ft = sched.scheleJob(job, trigger);
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: "+ trigger.getCronExpression());
// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job
sched.start();
try {
//主线程等待一分钟
Thread.sleep(60L * 1000L);
} catch (Exception e) {}
//关闭定时调度,定时器不再工作
sched.shutdown(true);
}
public static void main(String[] args) throws Exception {
Test test = new Test();
test.go();
}
}
import static org.quartz.CronScheleBuilder.cronSchele;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheler;
import org.quartz.SchelerFactory;
import org.quartz.impl.StdSchelerFactory;
public class Test {
public void go() throws Exception {
// 首先,必需要取得一个Scheler的引用
SchelerFactory sf = new StdSchelerFactory();
Scheler sched = sf.getScheler();
//jobs可以在scheled的sched.start()方法前被调用
//job 1将每隔20秒执行一次
JobDetail job = newJob(myJob.class).withIdentity("job1", "group1").build();
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchele(cronSchele("0/20 * * * * ?")).build();
Date ft = sched.scheleJob(job, trigger);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: " + trigger.getCronExpression());
// job 2将每2分钟执行一次(在该分钟的第15秒)
job = newJob(myJob.class).withIdentity("job2", "group1").build();
trigger = newTrigger().withIdentity("trigger2", "group1").withSchele(cronSchele("15 0/2 * * * ?")).build();
ft = sched.scheleJob(job, trigger);
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",并且以如下重复规则重复执行: "+ trigger.getCronExpression());
// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job
sched.start();
try {
//主线程等待一分钟
Thread.sleep(60L * 1000L);
} catch (Exception e) {}
//关闭定时调度,定时器不再工作
sched.shutdown(true);
}
public static void main(String[] args) throws Exception {
Test test = new Test();
test.go();
}
}
OK了,Job1和Job2就会被安排为定时执行了。此时程序是可以执行的了,但是可能会输出WARN级别日志,这是因为没有加log4j的配置文件,加上配置文件,就OK了。这里需要说明的地方只有一个,其它的可以直接Copy到您的项目里面。看代码:
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchele(cronSchele("0/20 * * * * ?")).build();
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchele(cronSchele("0/20 * * * * ?")).build();
⑸ Java定时器Java定时器怎么实现一个任务多个时间点,给别人用时间可以改动的
java中quartz框架设置定时任务时,是可以设置各种时间启动的
每天什么时候执行:
<value>0 59 23 * * ?</value>: 如下为每天23:59:00开始回执行
<value>0 1,2,3 11,12 * * ? </value>: 每天11:01,11:02,11:03; 12:01,12:02,12:03分执答行任务
至于你说的别人可以改时间,你可以把这个时间参数提取处理,放到一个页面或者数据库存起来,然后别人通过页面或者链接数据库修改就行了。
⑹ 教你如何使用quartz定时任务器
Quartz定时任务提供了强大的任务调度功能,包括Scheled定时器任务和Cron表达式定时任务。
定时任务类与启动类紧密相连,例如每两秒触发一次的任务,通过Scheled的cron表达式实现。cron表达式由6个域组成,每个域代表不同的时间含义,如分秒的通配符、范围和周期性触发等。
Quartz在Spring Boot中作为任务调度框架,简化了任务的配置和管理。它支持SimpleTrigger和CronTrigger两种常用定时器类型,如每周五执行一次或每月10日10:15执行。
⑺ 求高手指点一二,我需要用java编写一个定时器,每天8点开始执行,每一个小时执行一次,过了晚上12点停止
ScheledExecutorServiceservice=Executors.();
service.scheleAtFixedRate(newTimerTask(){
@Override
publicvoidrun(){
if(当前时间>8点){
dowork();//你要做的事
}
if(当前时间>12点){
this.cancel();
}
}
},0,1,TimeUnit.HOURS);