1. 如何让java定时执行一个方法
你可以通过 spring的定时器来实现该功能, 给你一个例子吧.
Timer.xml 配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> -->
<beans default-autowire="byName" default-lazy-init="true">
<bean id="zntask" class="com.soft.util.quartzTask"></bean> <!—实现定时功能的类-- >
<bean id="ZntaskTopSaleJobDetail"
class="org.springframework.scheling.quartz.">
<property name="targetObject" ref="zntask"></property>
<!—quartzTask 定时调用的方法 znrwdb -- >
<property name="targetMethod" value="znrwdb"></property>
</bean>
<bean id="zntaskTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="ZntaskTopSaleJobDetail"/>
</property>
<property name="cronExpression">
<value>0 0 0 12 * * ?</value> <!-- 每隔12小时 执行一次 -->
</property>
</bean>
<bean class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref bean="zntaskTrigger"/>
</list>
</property>
</bean>
</beans>
最后将 timer.xml 引入spring的applicationContext.xml文件即可,启动服务器时会自动加载执行定时方法 znrwdb
Eg:
applicationContext.xml 中:
<!-- 引入定时器 -->
<import resource=" timer.xml” />
2. 如何让java定时执行一个方法
现在能想到的是三种方法能实现:
1、普通thread实现
:是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。
2、timertask
:启动和去取消任务时可以控制,第一次执行任务时可以指定你想要的delay时间。
3、scheledexecutorservice实现
:最理想的定时任务实现方式,相比于timer的单线程,它是通过线程池的方式来执行任务的,可以很灵活的去设定第一次执行任务delay时间,提供了良好的约定,以便设定执行的时间间隔等。
希望能帮到你。
3. 我有一个java程序的jar包,如何在.bat文件中定时循环定时执行,比如说定时五分钟执行一次
在jar文件里的main方法执行定时器,也就是Timer,设置五分钟执行一次,把要执行的代码方到Timer的方法里
4. java怎么根据用户设定的时间执行定时任务
// 一天的毫秒数
long daySpan = 24 * 60 * 60 * 1000;
// 规定的每天时间15:33:30运行
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '15:33:30'");
// 首次运行时间
Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
// 如果今天的已经过了 首次运行时间就改为明天
if(System.currentTimeMillis() > startTime.getTime())
startTime = new Date(startTime.getTime() + daySpan);
Timer t = new Timer();
TimerTask task = new TimerTask(){
@Override
public void run() {
// 要执行的代码
System.err.println("xxxxxxxxx");
}
};
// 以每24小时执行一次
t.scheleAtFixedRate(task, startTime, daySpan);
5. java定时器 每天凌晨 固定执行一个方法
二、如果是需要Tomcat启动就能执行,不需要main方法的定时器的话:
web.xml里面需要这么配置:
<listener>
<listener-class>
com.InitListener
</listener-class>
</listener>
第一个类:InitListener
package com.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 系统启动时的监听类 初始化系统数据
*
* @author jhoneder
*
*/
public class InitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
// context销毁时,销毁初始化数据
}
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
try {
goTimmer();
} catch (Exception e) {
System.out.println("失败:" + e.getMessage());
}
}
private void goTimer() {
Timer timmerTask = new Timer();
Calendar calEnviron = Calendar.getInstance();
// 每天的02:00.am开始执行
calEnviron.set(Calendar.HOUR_OF_DAY, 2);
calEnviron.set(Calendar.MINUTE, 00);
// date为制定时间
Date dateSetter = new Date();
dateSetter = calEnviron.getTime();
// nowDate为当前时间
Date nowDateSetter = new Date();
// 所得时间差为,距现在待触发时间的间隔
long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
if (intervalEnviron < 0) {
calEnviron.add(Calendar.DAY_OF_MONTH, 1);
dateSetter = calEnviron.getTime();
intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
}
// 每24小时执行一次
timmerTask.schele(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);
}
}
第二个类:
package com.listener;
import java.util.Timer;
import java.util.TimerTask;
/**
* 被调用执行类
*
* @author Administrator
*
*/
public class UseTimer extends TimerTask {
Timer timer = new Timer();
public UseTimer(Timer timer) {
this.timer = timer;
}
/*
* 被调用具体的方法
*/
public void run() {
System.out.println("开始具体执行!");
}
}
不懂得话可以追问!
6. 怎么在java后台,写个定时任务。比如,十分钟执行一次接口。
对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
private java.util.Timer timer;//给你标注一下包,到时候别找错了
timer = new Timer(true);
timer.schele(
new java.util.TimerTask() { public void run()
{ //你要定时执行的功能} }, 0, 30*1000);
第一个参数是要操作的功能,一般匿名内部类,第二个参数是要设定延迟的时间,第三个参
数是周期的设定,每隔多长时间执行该操作。
更详细的内容,自己找API Timer类看看吧
7. java定时器 每天12点 固定执行一个方法
可以使用timer的schele方法实现定时任务,例如:把下面的new Date()参数换为你要定时的时间,创建一个线程执行你的任务
public class 定时 {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schele(new myTest(), new Date());
}
}
class myTest extends TimerTask {
@Override
public void run() {
//你要执行的任务
}
System.out.println(hour + ":" + fen + ":" + sec + ":" + i);
}
修改一下就可以了