Java定时更新数据---定时器(spring+struts2)
来源:互联网 发布:linux 安装rpm命令 编辑:程序博客网 时间:2024/05/19 02:40
1.重写ContextLoaderListener类
首先重写ContextLoaderListener类,在contextInitialized中继承原来的,并加入自己需要启动时自动运行的业务。要注意的是,这里的meritRemindBo,birthRemindBo和BirthRemindThread用注入的方式得不到,得用以下的方式获取
- public class ContextLoaderListenerOverWrite extends ContextLoaderListener {
- private IBirthRemindBo birthRemindBo;
- private IMeritRemindBo meritRemindBo;
-
- @Override
-
-
-
- public void contextInitialized(ServletContextEvent event) {
- super.contextInitialized(event);
- ApplicationContext applicationContext = WebApplicationContextUtils
- .getWebApplicationContext(event.getServletContext());
-
- birthRemindBo = (IBirthRemindBo) applicationContext
- .getBean("birthRemindBo");
- meritRemindBo = (IMeritRemindBo) applicationContext
- .getBean("meritRemindBo");
- BirthRemindThread birthRemindThread = (BirthRemindThread) applicationContext
- .getBean("BirthRemindThread");
- birthRemindThread.setBirthRemindBoo(birthRemindBo);
- birthRemindThread.setMeritRemindBoo(meritRemindBo);
- birthRemindThread.start();
-
- }
- }
2.修改配置
在web.xml中的配置也改成自己复写的。原本是org.springframework.context.ApplicationContext- <listener>
- <listener-class>com.scitel.sycrm.common.util.ContextLoaderListenerOverWrite</listener-class>
- </listener>
3.业务方法
然后我的birthRemindThread是线程类,在run方法里写你的业务。这里的birthRemindBoo和meritRemindBoo依然使用spring的注入
- public void run() {
- while (true) {
- System.out.println("thread..");
- try {
-
-
- StringBuffer sql = new StringBuffer(
- "select d.donor_id,d.donor_name,d.donor_birth,d.birth_choice,di.mcontact_mobile from donor_info_atta d left join donor_info di on d.donor_id=di.donor_id where to_char(d.donor_birth,'mm-dd') in (select to_char(sysdate,'mm-dd')from dual)");
-
-
- StringBuffer sql1 = new StringBuffer(
- "select d.donor_id,d.donor_name,d.donor_birth,d.birth_choice,di.mcontact_mobile from donor_info_atta d left join donor_info di on d.donor_id=di.donor_id where to_char(d.donor_birth,'mm-dd') in (select to_char(sysdate+15,'mm-dd')from dual)");
-
-
- StringBuffer sql2 = new StringBuffer(
- "select s.seqID,s.merit_name,s.sacrifice_type,s.donor_id,s.donor_name,s.sacrifice_end_date,d.mcontact_mobile from sacrifice_info s left join donor_info d on s.donor_id=d.donor_id where to_char(s.sacrifice_end_date,'yyyy-mm-dd') in (select to_char(sysdate,'yyyy-mm-dd')from dual) ");
-
- StringBuffer sql3 = new StringBuffer(
- "select s.seqID,s.merit_name,s.sacrifice_type,s.donor_id,s.donor_name,s.sacrifice_end_date,d.mcontact_mobile from sacrifice_info s left join donor_info d on s.donor_id=d.donor_id where to_char(s.sacrifice_end_date,'yyyy-mm-dd') in (select to_char(sysdate+3,'yyyy-mm-dd')from dual) ");
-
- birthRemindBoo.insertByTime(sql.toString());
-
- birthRemindBoo.insertByTime(sql1.toString());
- meritRemindBoo
- meritRemindBoo.insertByTime(sql2.toString());
- meritRemindBoo.insertByTime(sql3.toString());
-
- sleep(24 * 60 * 60 * 1000);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
这样就可以定时更新数据库内容了 0 0