<listener>
<listener-class>com.invoicing.action.basic.ContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring config -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml,
/WEB-INF/applicationContext-action.xml,
/WEB-INF/applicationContext-service.xml,
/WEB-INF/applicationContext-dao.xml
</param-value>
</context-param>
7 个解决方案
#1
com.invoicing.action.basic.ContextListener如下:
public class ContextListener implements ServletContextListener{
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{
timer = new java.util.Timer(true);
event.getServletContext().log("定时器");
timer.schedule(new RemindAction(event.getServletContext()), 0,864000000);
event.getServletContext().log("添加任务");
//System.out.println("hello~~~~~~~~~");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
public class ContextListener implements ServletContextListener{
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{
timer = new java.util.Timer(true);
event.getServletContext().log("定时器");
timer.schedule(new RemindAction(event.getServletContext()), 0,864000000);
event.getServletContext().log("添加任务");
//System.out.println("hello~~~~~~~~~");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
#2
RemindAction:
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
remindBirthday();//这里的方法启动后执行两次
remindMonth();
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
//isRunning = true;
System.out.println("定时执行成功@@@");
}
}
为什么执行两次呢?
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
remindBirthday();//这里的方法启动后执行两次
remindMonth();
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
//isRunning = true;
System.out.println("定时执行成功@@@");
}
}
为什么执行两次呢?
#3
同样遇到过这种问题,截止回复此贴时,还没有解决方案
#4
定时器实际的执行时间是否在配置的执行之间之后?
timer有2种模式,一种是保持时间的稳定,一种是保持执行次数的稳定。
如果是保持时间的稳定,那么如果实际执行时间在配置时间之后,定时器会以实际执行时间为准开始定时执行
如果是保持执行次数的稳定,那么如果实际执行时间在配置时间之后,定时器会以配置的时间为准,计算出到实际执行时间之间,有几个时间间隔,然后把前面没有执行的次数全部补上。
希望对楼主有所帮助。
timer有2种模式,一种是保持时间的稳定,一种是保持执行次数的稳定。
如果是保持时间的稳定,那么如果实际执行时间在配置时间之后,定时器会以实际执行时间为准开始定时执行
如果是保持执行次数的稳定,那么如果实际执行时间在配置时间之后,定时器会以配置的时间为准,计算出到实际执行时间之间,有几个时间间隔,然后把前面没有执行的次数全部补上。
希望对楼主有所帮助。
#5
不是4楼所说的那种情况 我这是24小时执行一次 启动的时候就做了两次执行动作
#6
没用到Quartz吗?
#7
就是用Quartz也一样的 肯定也是两次 应该是我配置的问题 会走两次监听吧
#1
com.invoicing.action.basic.ContextListener如下:
public class ContextListener implements ServletContextListener{
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{
timer = new java.util.Timer(true);
event.getServletContext().log("定时器");
timer.schedule(new RemindAction(event.getServletContext()), 0,864000000);
event.getServletContext().log("添加任务");
//System.out.println("hello~~~~~~~~~");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
public class ContextListener implements ServletContextListener{
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{
timer = new java.util.Timer(true);
event.getServletContext().log("定时器");
timer.schedule(new RemindAction(event.getServletContext()), 0,864000000);
event.getServletContext().log("添加任务");
//System.out.println("hello~~~~~~~~~");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
#2
RemindAction:
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
remindBirthday();//这里的方法启动后执行两次
remindMonth();
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
//isRunning = true;
System.out.println("定时执行成功@@@");
}
}
为什么执行两次呢?
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
remindBirthday();//这里的方法启动后执行两次
remindMonth();
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
//isRunning = true;
System.out.println("定时执行成功@@@");
}
}
为什么执行两次呢?
#3
同样遇到过这种问题,截止回复此贴时,还没有解决方案
#4
定时器实际的执行时间是否在配置的执行之间之后?
timer有2种模式,一种是保持时间的稳定,一种是保持执行次数的稳定。
如果是保持时间的稳定,那么如果实际执行时间在配置时间之后,定时器会以实际执行时间为准开始定时执行
如果是保持执行次数的稳定,那么如果实际执行时间在配置时间之后,定时器会以配置的时间为准,计算出到实际执行时间之间,有几个时间间隔,然后把前面没有执行的次数全部补上。
希望对楼主有所帮助。
timer有2种模式,一种是保持时间的稳定,一种是保持执行次数的稳定。
如果是保持时间的稳定,那么如果实际执行时间在配置时间之后,定时器会以实际执行时间为准开始定时执行
如果是保持执行次数的稳定,那么如果实际执行时间在配置时间之后,定时器会以配置的时间为准,计算出到实际执行时间之间,有几个时间间隔,然后把前面没有执行的次数全部补上。
希望对楼主有所帮助。
#5
不是4楼所说的那种情况 我这是24小时执行一次 启动的时候就做了两次执行动作
#6
没用到Quartz吗?
#7
就是用Quartz也一样的 肯定也是两次 应该是我配置的问题 会走两次监听吧