Java定时更新数据---定时器(spring+struts2)

来源:互联网 发布:linux 安装rpm命令 编辑:程序博客网 时间:2024/05/19 02:40

1.重写ContextLoaderListener类


首先重写ContextLoaderListener类,在contextInitialized中继承原来的,并加入自己需要启动时自动运行的业务。要注意的是,这里的meritRemindBo,birthRemindBo和BirthRemindThread用注入的方式得不到,得用以下的方式获取

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class ContextLoaderListenerOverWrite extends ContextLoaderListener {  
  2.     private IBirthRemindBo birthRemindBo;  
  3.     private IMeritRemindBo meritRemindBo;  
  4.   
  5.     @Override  
  6.     /**  
  7.      * @description 重写ContextLoaderListener的contextInitialized方法  
  8.      */  
  9.     public void contextInitialized(ServletContextEvent event) {  
  10.         super.contextInitialized(event);  
  11.         ApplicationContext applicationContext = WebApplicationContextUtils  
  12.                 .getWebApplicationContext(event.getServletContext());  
  13.         // 获取bean  
  14.         birthRemindBo = (IBirthRemindBo) applicationContext  
  15.                 .getBean("birthRemindBo");  
  16.         meritRemindBo = (IMeritRemindBo) applicationContext  
  17.                 .getBean("meritRemindBo");  
  18.         BirthRemindThread birthRemindThread = (BirthRemindThread) applicationContext  
  19.                 .getBean("BirthRemindThread");  
  20.         birthRemindThread.setBirthRemindBoo(birthRemindBo);  
  21.         birthRemindThread.setMeritRemindBoo(meritRemindBo);  
  22.         birthRemindThread.start();  
  23.   
  24.     }  
  25. }  


2.修改配置


在web.xml中的配置也改成自己复写的。原本是org.springframework.context.ApplicationContext

[plain] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <listener>  
  2.         <listener-class>com.scitel.sycrm.common.util.ContextLoaderListenerOverWrite</listener-class>  
  3. </listener>  

3.业务方法


然后我的birthRemindThread是线程类,在run方法里写你的业务。这里的birthRemindBoo和meritRemindBoo依然使用spring的注入

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public void run() {  
  2.         while (true) {  
  3.             System.out.println("thread..");  
  4.             try {  
  5.   
  6.                 // 当天生日(包括闰年)  
  7.                 StringBuffer sql = new StringBuffer(  
  8.                         "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)");  
  9.                 // System.out.println(sql);  
  10.                 // 15天后生日  
  11.                 StringBuffer sql1 = new StringBuffer(  
  12.                         "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)");  
  13.                 // System.out.println(sql1);  
  14.                 // 供奉今日到期  
  15.                 StringBuffer sql2 = new StringBuffer(  
  16.                         "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) ");  
  17.                 // 供奉还有3天到期  
  18.                 StringBuffer sql3 = new StringBuffer(  
  19.                         "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) ");  
  20.   
  21.                 birthRemindBoo.insertByTime(sql.toString());  
  22.   
  23.                 birthRemindBoo.insertByTime(sql1.toString());  
  24. meritRemindBoo  
  25.                 meritRemindBoo.insertByTime(sql2.toString());  
  26.                 meritRemindBoo.insertByTime(sql3.toString());  
  27.   
  28.                 sleep(24 * 60 * 60 * 1000);  
  29.             } catch (InterruptedException e) {  
  30.                 // TODO Auto-generated catch block  
  31.                 e.printStackTrace();  
  32.             }  

这样就可以定时更新数据库内容了
0 0
原创粉丝点击