当前位置:编程学习 > JAVA >>

怎么在struts2里配置java定时器timer

项目中只用到struts2,假如有个定时器,如:


public class EvaluateActivityTimer extends TimerTask{

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public void run(){
        System.out.println(df.format(new Date()));
    }

public static void main(String[] args) {

Timer timer = new Timer();

timer.schedule(new EvaluateActivityTimer(), 0, 1000);
}

}

如果让他在项目启动时生效,在哪儿配置的,在么配啊? --------------------编程问答-------------------- 写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可 --------------------编程问答--------------------
引用 1 楼 yangqiu0928 的回复:
写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置? --------------------编程问答-------------------- bean 容器是 spring 吗?
推荐使用 task:scheduled-tasks --------------------编程问答--------------------
引用 2 楼 piaoranxinyu 的回复:
Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener> --------------------编程问答--------------------
引用 1 楼 yangqiu0928 的回复:
写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

是不是就是用servlet的监听器?和struts没关系? --------------------编程问答--------------------
引用 3 楼 defonds 的回复:
bean 容器是 spring 吗?
推荐使用 task:scheduled-tasks

没用到spring啊 --------------------编程问答--------------------
引用 4 楼 yangqiu0928 的回复:
Quote: 引用 2 楼 piaoranxinyu 的回复:

Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener>


是的,什么都没用到,只用servlet --------------------编程问答--------------------
引用 7 楼 yangqiu0928 的回复:
Quote: 引用 4 楼 yangqiu0928 的回复:

Quote: 引用 2 楼 piaoranxinyu 的回复:

Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener>


是的,什么都没用到,只用servlet

在这个监听器里访问数据库访问不了,报链接池的错误,
java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'ntpa',

<proxool>
<alias>ntpa</alias>
<driver-url>jdbc:sqlserver://192.168.1.88:1433;DatabaseName=firehonesttow</driver-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="123" />
</driver-properties>
<house-keeping-test-sql>select count(*) from gd_sys_user</house-keeping-test-sql>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>10</maximum-new-connections>
<prototype-count>12</prototype-count>
<maximum-connection-count>200</maximum-connection-count>
<minimum-connection-count>5</minimum-connection-count>
</proxool>

这个不知道怎么搞,不知道还有没有其他方法。。。 --------------------编程问答--------------------

引用 7 楼 yangqiu0928 的回复:
Quote: 引用 4 楼 yangqiu0928 的回复:

Quote: 引用 2 楼 piaoranxinyu 的回复:

Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener>


是的,什么都没用到,只用servlet


明白了,原来你是在任务里面要执行数据库操作。 这样肯定会有问题,这个listener是在web服务启动的时候开始执行的,这个时候,你的数据库配置估计还没有实例化,在任务里调用,肯定会有问题。 用spring会简单一些。
--------------------编程问答--------------------
引用 9 楼 yangqiu0928 的回复:
Quote: 引用 7 楼 yangqiu0928 的回复:

Quote: 引用 4 楼 yangqiu0928 的回复:

Quote: 引用 2 楼 piaoranxinyu 的回复:

Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener>


是的,什么都没用到,只用servlet


明白了,原来你是在任务里面要执行数据库操作。 这样肯定会有问题,这个listener是在web服务启动的时候开始执行的,这个时候,你的数据库配置估计还没有实例化,在任务里调用,肯定会有问题。 用spring会简单一些。

除了用spring还有么有其他方法,应为没用到spring,要定时对数据库进行一些操作。。。 --------------------编程问答-------------------- 在监听器里自己创建链接connection行不行? --------------------编程问答-------------------- 我数据库sql语句不怎么会写 --------------------编程问答--------------------
引用 10 楼 piaoranxinyu 的回复:
Quote: 引用 9 楼 yangqiu0928 的回复:



Quote: 引用 7 楼 yangqiu0928 的回复:

Quote: 引用 4 楼 yangqiu0928 的回复:

Quote: 引用 2 楼 piaoranxinyu 的回复:

Quote: 引用 1 楼 yangqiu0928 的回复:

写一个listener 实现ServletContextListener 接口,在contextInitialized方法里面启动执行你的任务即可

在web.xml里配置?


web.xml里面配置一个Listener就可以,例如
 <listener>
   <listener-class>listener.TaskListener</listener-class>
  </listener>


是的,什么都没用到,只用servlet


明白了,原来你是在任务里面要执行数据库操作。 这样肯定会有问题,这个listener是在web服务启动的时候开始执行的,这个时候,你的数据库配置估计还没有实例化,在任务里调用,肯定会有问题。 用spring会简单一些。

除了用spring还有么有其他方法,应为没用到spring,要定时对数据库进行一些操作。。。


数据库连接池是怎么配置的,直接在tomcat下面配置的吗? --------------------编程问答-------------------- 是啊,在web-inf下的proxool.xml文件里配置的啊:

<proxool-config>
<proxool>
<alias>ntpa</alias>
<driver-url>jdbc:sqlserver://192.168.1.88:1433;DatabaseName=firehonesttow</driver-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="123" />
</driver-properties>
<house-keeping-test-sql>select count(*) from gd_sys_user</house-keeping-test-sql>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>10</maximum-new-connections>
<prototype-count>12</prototype-count>
<maximum-connection-count>200</maximum-connection-count>
<minimum-connection-count>5</minimum-connection-count>
</proxool>
</proxool-config>

--------------------编程问答--------------------
引用 14 楼 piaoranxinyu 的回复:
是啊,在web-inf下的proxool.xml文件里配置的啊:

<proxool-config>
<proxool>
<alias>ntpa</alias>
<driver-url>jdbc:sqlserver://192.168.1.88:1433;DatabaseName=firehonesttow</driver-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa" />
<property name="password" value="123" />
</driver-properties>
<house-keeping-test-sql>select count(*) from gd_sys_user</house-keeping-test-sql>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>10</maximum-new-connections>
<prototype-count>12</prototype-count>
<maximum-connection-count>200</maximum-connection-count>
<minimum-connection-count>5</minimum-connection-count>
</proxool>
</proxool-config>
 没这样弄过,你在dao层怎么使用连接的? --------------------编程问答-------------------- 要不然你在那个任务里面手写一个jdbc链接,就可以了。 --------------------编程问答--------------------
引用 16 楼 yangqiu0928 的回复:
要不然你在那个任务里面手写一个jdbc链接,就可以了。

我改了下,换了一下,实现HttpSessionListener接口,然后在创建session的时候触发,这样没问题,你觉得呢?

public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
Timer timer = new Timer();
timer.schedule(new EvaluateActivityTimer(), 0, 1000);
}
--------------------编程问答-------------------- 写一个servlet,在web.xml中将该servlet配置成load-on-start为1就行了 --------------------编程问答--------------------
引用 17 楼 piaoranxinyu 的回复:
Quote: 引用 16 楼 yangqiu0928 的回复:

要不然你在那个任务里面手写一个jdbc链接,就可以了。

我改了下,换了一下,实现HttpSessionListener接口,然后在创建session的时候触发,这样没问题,你觉得呢?

public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
Timer timer = new Timer();
timer.schedule(new EvaluateActivityTimer(), 0, 1000);
}


应该不行,sessionCreated在什么时候执行,这个你要再好好看看。 --------------------编程问答-------------------- 把定时器写在servlet的init方法里,然后在web.xml里让servlet随项目一起启动就行了 --------------------编程问答-------------------- 你是只需要项目启动就执行一次还是要定时执行啊
定时执行一般用的spring的定时框架
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,