1.重写ContextLoaderListener类
首先重写ContextLoaderListener类,在contextInitialized中继承原来的,并加入自己需要启动时自动运行的业务。要注意的是,这里的meritRemindBo,birthRemindBo和BirthRemindThread用注入的方式得不到,得用以下的方式获取
- public class ContextLoaderListenerOverWrite extends ContextLoaderListener {
- private IBirthRemindBo birthRemindBo;
- private IMeritRemindBo meritRemindBo;
- @Override
- /**
- * @description 重写ContextLoaderListener的contextInitialized方法
- */
- public void contextInitialized(ServletContextEvent event) {
- super.contextInitialized(event);
- ApplicationContext applicationContext = WebApplicationContextUtils
- .getWebApplicationContext(event.getServletContext());
- // 获取bean
- 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)");
- // System.out.println(sql);
- // 15天后生日
- 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)");
- // System.out.println(sql1);
- // 供奉今日到期
- 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) ");
- // 供奉还有3天到期
- 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) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
这样就可以定时更新数据库内容了