1. java中定时自动完成任务的实现
JAVA中定时自动完成任务的实现要用到JAVA中的定时器TimerTask和监听器 听起来貌似有点困难但是实现起来还是比较容易的!纸老虎~~!
下面的列子很详细 是关于定时向服务器上传(也可以是其他的动作这是看需要关于上传我博客有写过可以参考)文件的列子简单的 步就可以实现
首先创建动作bean
package sun time ;
public class UploadFile{
/**
*实现上传的代码s省略 可以看下我下面的 篇日志
__haiming/blog/static/ / 使用 *** arupload 实现上传下载[有例子]
__haiming/blog/static/ / 使用Struts 多文件上传
*/
public void upload()
{
System out println( 系统自动的上传文件了 );
}
}
创建定时器MyTaker并完成相应的功能
package sun time ;
import java util Calendar;
import java util TimerTask;
import javax servlet ServletContext;
public class MyTaker extends TimerTask {
private static boolean isRun = false;
private ServletContext context ;
private Calendar ca = Calendar getInstance();
public MyTaker(ServletContext context)
{
ntext = context;
}
@Override
public void run() {
if(!isRun){
if( ==ca get(Calendar MINUTE)){
isRun = true;
context log( 正在执行所加载的任务 );
UploadFile uf= new UploadFile();
uf upload();
isRun =false;
context log( 任务顺利完成 );
}
}
else
{
System out println( 任务还没有执行完毕 );
}
}
}
创建监听器ContextListener
package sun time ;
import javax servlet ServletContextEvent;
import javax servlet ServletContextListener;
import sun time MyTaker;
import java util *;
public class ContexListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer cancel();
event getServletContext() log( 任务列表已经销毁了 );
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event getServletContext() log( 服务器已经启动了 );
timer schele(new MyTaker(event getServletContext()) );///每隔多长时间检查扫描一次
event getServletContext() log( 已经加载了任务的列表 );
}
}
最后一步就是在web xml中配置监听
<! Java定时器 >
<listener>
<listener class> sun time ContexListener</listener class>
lishixin/Article/program/Java/hx/201311/26450
2. JAVA定时执行任务,每天定时几点钟执行任务
案例: 你想让他几点执行都ok
1.MyJob02
//首先我们需要定义一个任务类,比如为MyJob02 ,
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在
//这个方法中就是我们具体的任务执行的地方。
//由希望由调度程序执行的组件实现的接口
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 执行响应的任务.
System.out.println("HelloJob.execute,"+new Date());
}
2.
public static void main(String[] args) throws Exception {
//SchelerFactory 是一个接口,用于Scheler的创建和管理
SchelerFactory factory = new StdSchelerFactory();
//从工厂里面拿到一个scheler实例
//计划表(可能翻译的不太贴切),现在我们有了要做的内容,
//与调度程序交互的主要API
/*
* Scheler的生命期,从SchelerFactory创建它时开始,
到Scheler调用shutdown()方法时结束;Scheler被创建后,
可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作
(如暂停Trigger)。但是,Scheler只有在调用start()方法后,
才会真正地触发trigger(即执行job)
*/
Scheler scheler = factory.getScheler();
//具体任务.
//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();
}
3. java消息定时推送怎么实现
定时任务实现的几种方式:4. java中怎么实现定时功能
我们可以使用Timer和TimerTask类在java中实现定时任务,详细说明如下:
1、基础知识
java.util.Timer
一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
java.util.TimerTask
由 Timer 安排为一次执行或重复执行的任务。
2、示例代码
该示例实现这样一个功能,在系统运行期间,每30分钟,系统自动检查连接池中的可用连接数,并输出到日志中。
首先创建一个需要定时执行的任务类,这个任务类需要继承TimerTask,然后重写run()方法,run()方法体中的代码就是定时需要执行的操作,在本demo中,就是获取连接池中当前可用连接数,并输出到日志中,具体实现代码如下:
public class TaskAvailableConnectNumber extends TimerTask {
private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class);
private ConnectionPool pool=ConnectionPool.getInstance();
@Override
publicvoid run() {
log.debug("当前连接池中可用连接数"+pool.getAvailableConnectNumber());
}
}
下面定义一个监听器,负责在应用服务器启动时打开定时器,监听器需要实现ServletContextListener接口,并重写其中的contextInitialized()和contextDestroyed()方法,代码如下:
public class OnLineListener implements ServletContextListener{
private Logger log = Logger.getLogger(OnLineListener.class);
Timer timer = null;
//在应用服务器启动时,会执行该方法
publicvoid contextInitialized(ServletContextEvent arg0) {
//创建一个定时器,用于安排需要定时执行的任务。
timer = new Timer();
//为定时器安排需要定时执行的任务,该任务就是前面创建的任务类TaskAvailableConnectNumber,并指定该任务每30分钟执行一次。
timer.schele(new TaskAvailableConnectNumber(), 0, 30*60*1000);
log.debug("启动定时器");
}
//应用服务器关闭时,会执行该方法,完成关闭定时器的操作。
public void contextDestroyed(ServletContextEvent arg0) {
if(timer!=null){
timer.cancel();//关闭定时器
log.debug("-----定时器销毁--------");
}
}
}
监听器要想正常运行,需要在web.xml文件中进行配置,配置信息如下:
<!-- 监听器配置开始 -->
<listener>
<listener-class>
cn.sdfi.listen.OnLineListener
</listener-class>
</listener>
<!-- 监听器配置结束 -->
以上步骤完成后,一个简单的定时器就算开发完成了。
5. java瀹氭椂浠诲姟娌″崄鍒嗛挓鎵ц屼竴娆,鎴愬姛灏变笉鎵ц屼簡
棰樹富闂鐨勬槸java瀹氭椂浠诲姟娌″崄鍒嗛挓鎵ц屼竴娆,鎴愬姛灏变笉鎵ц屼簡鏄浠涔堝師鍥狅紵鏄绯荤粺鏁呴殰鐨勯棶棰樸
java瀹氭椂浠诲姟娌″崄鍒嗛挓鎵ц屼竴娆★紝鎴愬姛灏变笉鎵ц屼簡鏄绯荤粺鏁呴殰鐨勯棶棰橈紝涓昏佹槸浠诲姟鏈澶栭潰娌℃湁鐢╰ry-catch 鎹曟崏锛屾垨鑰呮槸浠诲姟鎵ц屾椂锛岄亣鍒颁簡Uncaught Exception锛屽艰嚧杩欎釜瀹氭椂浠诲姟鍋滄㈡墽琛屼簡銆
java鏄涓绉嶈$畻鏈虹紪绋嬭瑷锛屾嫢鏈夎法骞冲彴锛岄潰鍚戝硅薄锛屾硾鍨嬬紪绋嬬殑鐗规э紝骞挎硾搴旂敤浜庝紒涓氱骇Web搴旂敤寮鍙戝拰绉诲姩搴旂敤寮鍙戯紝浠昏亴浜庡お闃冲井绯荤粺鐨勮┕濮嗘柉路楂樻柉鏋楃瓑浜轰簬1990骞翠唬鍒濆紑鍙慗ava璇瑷鐨勯洀褰锛屾渶鍒濊鍛藉悕涓篛ak锛岀洰鏍囪剧疆鍦ㄥ剁敤鐢靛櫒绛夊皬鍨嬬郴缁熺殑绋嬪簭璇瑷銆
6. java 怎么写定时任务
如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK 入门级的定期器Timer来执行重复任务。
一、原理
JDK中,定时器任务的执行需要两个基本的类:
java.util.Timer;
java.util.TimerTask;
要运行一个定时任务,最基本的步骤如下:
1、建立一个要执行的任务TimerTask。
2、创建一个Timer实例,通过Timer提供的schele()方法,将 TimerTask加入到定时器Timer中,同时设置执行的规则即可。
当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行。
Timer中的schele()方法是有多种重载格式的,以适应不同的情况。该方法的格式如下:
void schele(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schele(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schele(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schele(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务。purge()从此计时器的任务队列中移除所有已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。
TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()----计时器任务要执行的操作。因此,每个具体的任务类都必须继承TimerTask类,并且重写run()方法。另外它还有两个非抽象的方法:
boolean cancel()
取消此计时器任务。
long scheledExecutionTime()
返回此任务最近实际 执行的安排 执行时间。
二、例子
下面用Timer实现一个简单例子:
package stu.timer;
import java.util.Date;
import java.util.TimerTask;
/**
* 重复执行的任务
*
* @author leimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
/**
* 此计时器任务要执行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheledExecutionTime());
System.out.println("本次任务执行的时间是" + executeTime);
}
}
package stu.timer;
import java.util.Timer;
import java.util.TimerTask;
/**
* 测试JDK Timer的执行
*
* @author leimin,2008-10-9 9:24:35
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schele(task, 500L, 1000L);
}
}
运行结果:
本次任务执行的时间是Thu Oct 09 09:47:57 CST 2008
本次任务执行的时间是Thu Oct 09 09:47:58 CST 2008
本次任务执行的时间是Thu Oct 09 09:47:59 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:00 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:01 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:02 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:03 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:04 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:05 CST 2008
......
7. Java涓璗imer瀹氭椂鍣ㄦ槸鎬庝箞瀹炵幇鐨勶紵
娣卞叆鎺㈢储Java涓鐨勫畾鏃跺櫒榄旀硶锛氭彮绉樺備綍瀹炵幇姣忔棩瀹氭椂浠诲姟
鍦↗ava鐨勪笘鐣岄噷锛屽畾鏃跺櫒濡傚悓榄旀硶鑸绮惧噯锛岃兘纭淇濇垜浠鐨勭▼搴忓湪鐗瑰畾鏃跺埢鎵ц屽叧閿浠诲姟銆傚挨鍏舵槸褰撴垜浠瑕佷负搴旂敤绋嬪簭璁捐′竴涓姣忔棩娓呯悊涓存椂鏂囦欢鐨勪换鍔℃椂锛孞ava.util.Timer鎻愪緵浜嗗己澶х殑宸ュ叿銆備笅闈锛屾垜浠灏嗕竴姝ユュ墫鏋愯繖涓瀹氭椂鍣ㄧ殑宸ヤ綔鍘熺悊锛屼粠鍒涘缓浠诲姟鍒伴厤缃鐩戝惉鍣锛岃╀綘瀵硅繖涓鏈哄埗鏈夋洿娣卞叆鐨勭悊瑙c
棣栧厛锛孞ava鐨凾imer鏄涓涓寮哄ぇ鐨勫伐鍏凤紝瀹冨厑璁告垜浠璁惧畾闂撮殧鏃堕棿鎵ц岄勫厛缂栨帓鐨勪换鍔★紝杩欓氳繃TimerTask绫诲疄鐜般備緥濡傦紝濡傛灉鎴戜滑鎯虫瘡鏅22鐐规墽琛屾煇涓娓呯悊鎿嶄綔锛屽彲浠ヨ繖鏍峰啓锛歚timer.schele(TimerTask, 0, 60 * 60 * 1000 * 22);` 杩欓噷锛0琛ㄧず涓嶇瓑寰呯珛鍗虫墽琛岋紝60 * 60 * 1000 * 22鍒欐槸22灏忔椂鐨勬绉掓暟銆
涓轰簡纭淇濆畾鏃跺櫒鍦╓eb搴旂敤鍚鍔ㄦ椂鍚鍔ㄥ苟鎸佺画鍒板簲鐢ㄧ敓鍛藉懆鏈燂紝鎴戜滑闇瑕佸皢瀹冧笌Servlet鐨勭洃鍚鍣ㄧ粨鍚堛侰ontextListener绫诲氨鎵婕斾簡杩欎釜瑙掕壊锛屽畠浼氬湪搴旂敤鍒濆嬪寲鏃惰嚜鍔ㄥ姞杞姐傞厤缃鏂囦欢涓锛屽彧闇娣诲姞濡備笅鐩戝惉鍣ㄥ畾涔夛細
```xml
com.sxl.ContextListener
```
ContextListener绫荤殑鏍稿績鍦ㄤ簬鍒濆嬪寲瀹氭椂鍣ㄥ苟璁剧疆浠诲姟銆傚綋搴旂敤鍚鍔ㄦ椂锛屽畠浼氬垱寤轰竴涓鏂扮殑Timer瀹炰緥锛岀劧鍚庢牴鎹闇姹傚畾鍒朵换鍔℃墽琛屾椂闂达紝濡傛瘡澶╁噷鏅1鐐癸紙Calendar calendar = ...; calendar.set(...);锛夈傛帴鐫锛屽皢DelFileTask锛堜竴涓瀹炵幇浜員imerTask鐨勭被锛夊姞鍏ュ埌瀹氭椂鍣ㄧ殑浠诲姟璋冨害琛ㄤ腑锛屾寚瀹氭瘡24灏忔椂鎵ц屼竴娆°
```java
timer.schele(new DelFileTask(arg0.getServletContext()), date, period);
```
DelFileTask绫荤殑涓昏佸伐浣滄槸鍦╮un鏂规硶涓鎵ц屾竻鐞嗕复鏃舵枃浠剁殑鎿嶄綔锛屽悓鏃舵帶鍒朵换鍔℃槸鍚﹀凡鎵ц屻傚綋浠诲姟鎵ц屽畬姣曪紝瀹冧細鏍囪颁换鍔$姸鎬佷负宸插畬鎴愶紝閬垮厤閲嶅嶆墽琛屻
鑷虫わ紝浣犲凡缁忔帉鎻′簡Java瀹氭椂鍣ㄧ殑鍩烘湰鏋勫缓鍜屽簲鐢ㄣ備絾鍒蹇樹簡锛岃繖鍙鏄涓涓鍩虹妯℃澘锛屽疄闄呴」鐩涓鍙鑳介渶瑕佹牴鎹鍏蜂綋闇姹傝皟鏁翠换鍔$被锛圖elFileTask锛夊拰鐩戝惉鍣锛圕ontextListener锛夛紝姣斿傛坊鍔犳棩蹇椼侀敊璇澶勭悊鎴栬呬紭鍖栨墽琛岄昏緫銆
閫氳繃杩欐℃繁鍏ョ殑鎺㈢储锛屼綘涓嶄粎浜嗚В浜咼ava Timer鐨勫疄鐜帮紝杩樺︿細浜嗗備綍灏嗗叾宸у欏湴铻嶅叆鍒版棩甯哥殑寮鍙戞祦绋嬩腑銆傜幇鍦锛屼綘鍙浠ュ紑濮嬪湪浣犵殑椤圭洰涓澶у睍韬鎵嬶紝涓轰綘鐨勫簲鐢ㄧ▼搴忓炴坊鏅鸿兘鍖栫殑瀹氭椂鍔熻兘浜嗐
8. 在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的定时机制 请仔细的看看 如果可以请给分哦
9. java怎么让程序每天晚上12点做定时任务,因为程序是不定时开的,所以要实时监听系统时间。
java定时任务,每天定时执行任务(JDK TimerTask)
标签: taskTasktimerTimer
2013-01-14 13:28 8747人阅读 评论(0) 收藏 举报
01 public class TimerManager {
02
03 //时间间隔
04 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
05
06 public TimerManager() {
07 Calendar calendar = Calendar.getInstance();
08
09 /*** 定制每日2:00执行方法 ***/
10
11 calendar.set(Calendar.HOUR_OF_DAY, 2);
12 calendar.set(Calendar.MINUTE, 0);
13 calendar.set(Calendar.SECOND, 0);
14
15 Date date=calendar.getTime(); //第一次执行定时任务的时间
16
17 //如果第一次执行定时任务的时间 小于 当前的时间
18 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
19 if (date.before(new Date())) {
20 date = this.addDay(date, 1);
21 }
22
23 Timer timer = new Timer();
24
25 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
26 //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
27 timer.schele(task,date,PERIOD_DAY);
28 }
29
30 // 增加或减少天数
31 public Date addDay(Date date, int num) {
32 Calendar startDT = Calendar.getInstance();
33 startDT.setTime(date);
34 startDT.add(Calendar.DAY_OF_MONTH, num);
35 return startDT.getTime();
36 }
37
38 }
在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
01 public class NFDFlightDataTimerTask extends TimerTask {
02
03 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
04
05 @Override
06 public void run() {
07 try {
08 //在这里写你要执行的内容
09
10 } catch (Exception e) {
11 log.info("-------------解析信息发生异常--------------");
12 }
13 }
14 }
15
16 public class NFDFlightDataTaskListener implements ServletContextListener {
17
18 public void contextInitialized(ServletContextEvent event) {
19 new TimerManager();
20 }
21
22 public void contextDestroyed(ServletContextEvent event) {
23 }
24
25 }
然后要在web.xml里面配置监听器
1 <listener>
2 <listener-class>
3 com.listener.NFDFlightDataTaskListener
4 </listener-class>
5 </listener>