我的需求是需要在如果服务器每次开启的时候执行一次动作,如果服务器一直开启,则每天8点整的时候执行一次动作。下面是我的Servlet代码,/*
* 创建日期 2005-8-22
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.gever.cams.crm.util;import java.text.SimpleDateFormat;import javax.servlet.ServletContext;
import javax.servlet.ServletException;/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class RemindTest extends javax.servlet.http.HttpServlet {
private final Scheduler scheduler = new Scheduler(); private final SimpleDateFormat dateFormat = new SimpleDateFormat(
"dd MMM yyyy HH:mm:ss.SSS"); private int hourOfDay = 0, minute = 0, second = 0; public void init(javax.servlet.ServletConfig config)
throws ServletException {
try {
super.init(config); //服务器第一次开启自动检查一次
aaa(); scheduler.schedule(new SchedulerTask() { public void run() {
aaa();//每天8点执行一次
}
}, new DailyIterator(hourOfDay, minute, second)); } catch (Exception ex) {
throw new ServletException(ex); }
} void aaa() {
System.out.println("aaaaaaaaaaaaaaaaaa测试提醒--------");
}
}//web 配置<servlet>
<servlet-name>RemindTest</servlet-name>
<servlet-class>com.gever.cams.crm.util.RemindTest</servlet-class>
<init-param>
<param-name>hourofday</param-name>
<param-value>8</param-value>
</init-param>
<init-param>
<param-name>second</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>minute</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>200</load-on-startup>
</servlet>
* 创建日期 2005-8-22
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.gever.cams.crm.util;import java.text.SimpleDateFormat;import javax.servlet.ServletContext;
import javax.servlet.ServletException;/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class RemindTest extends javax.servlet.http.HttpServlet {
private final Scheduler scheduler = new Scheduler(); private final SimpleDateFormat dateFormat = new SimpleDateFormat(
"dd MMM yyyy HH:mm:ss.SSS"); private int hourOfDay = 0, minute = 0, second = 0; public void init(javax.servlet.ServletConfig config)
throws ServletException {
try {
super.init(config); //服务器第一次开启自动检查一次
aaa(); scheduler.schedule(new SchedulerTask() { public void run() {
aaa();//每天8点执行一次
}
}, new DailyIterator(hourOfDay, minute, second)); } catch (Exception ex) {
throw new ServletException(ex); }
} void aaa() {
System.out.println("aaaaaaaaaaaaaaaaaa测试提醒--------");
}
}//web 配置<servlet>
<servlet-name>RemindTest</servlet-name>
<servlet-class>com.gever.cams.crm.util.RemindTest</servlet-class>
<init-param>
<param-name>hourofday</param-name>
<param-value>8</param-value>
</init-param>
<init-param>
<param-name>second</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>minute</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>200</load-on-startup>
</servlet>
public Auto_Do() { Timer tr = new Timer();
Calendar cdr = Calendar.getInstance(); String s2DateNext = new java.text.SimpleDateFormat("yyyyMMdd").format(new
java.util.Date());
int year = Integer.parseInt(s2DateNext.substring(0, 4));
int month = Integer.parseInt(s2DateNext.substring(4, 6));
int day = Integer.parseInt(s2DateNext.substring(6, 8)); //设置第一次执行时间 凌晨 05:05:05
cdr.set(Calendar.YEAR, year);
cdr.set(Calendar.MONTH, month - 1);
cdr.set(Calendar.DAY_OF_MONTH, day);
cdr.set(Calendar.HOUR_OF_DAY, 05);
cdr.set(Calendar.MINUTE, 05);
cdr.set(Calendar.SECOND, 05); //建立执行列表
Do_YourWork do_it = new Do_YourWork();
tr.schedule(do_it, cdr.getTime(), 24 * 60 * 60 * 1000);
}
我现在就想用我这种方法来实现,应该是可以实现的吧,zengguiyeah(曾贵)
不对,我把第一个aaa()方法注释掉,还是执行两次,
kingfish(POWER OF JAVA) ( )
我现在就只想要它执行一次,为什么说
如果启动时定时器任务执行了1次说明你指定的时间可能有问题
定时任务首次执行时间你设置的是今天8点还是明天8点, 如果是今天8点, 那么启动时间只要大于8点,定时器就会执行一次
以tomcat为例子:
比如你webapps目录下放了目录manager
你在tomcat/conf/server.xml里又配置了一个context应用
<context path="/" docbase="webapps/manager"/>
这样在启动tomcat的时候就会造成2次初始化servlet了,你可以删掉这个context应用配置
或者把manager目录放置在其他地方,就ok了
运行2次因为你的web目录被容器2次加载造成的
以tomcat为例子:
比如你webapps目录下放了目录manager
你在tomcat/conf/server.xml里又配置了一个context应用
<context path="/" docbase="webapps/manager"/>
这样在启动tomcat的时候就会造成2次初始化servlet了,你可以删掉这个context应用配置
或者把manager目录放置在其他地方,就ok了
我照这位仁兄的说着去做了,但我的webapps目录下没有放manager目录,
我把tomcat/conf/server.xml下的context删掉了,果然只执行了一次,但问题是一般来说别人的配置是否都象我这样把这个删掉呢???删掉会不会影响系统的其他部分呢???
以tomcat为例子:
比如你webapps目录下放了目录manager
你在tomcat/conf/server.xml里又配置了一个context应用
<context path="/" docbase="webapps/manager"/>
这样在启动tomcat的时候就会造成2次初始化servlet了,你可以删掉这个context应用配置
或者把manager目录放置在其他地方,就ok了