`
wedtlcy
  • 浏览: 23371 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Spring定时任务之定期清除指定时间外的系统日志

    博客分类:
  • Java
 
阅读更多

1、我用的是CronTriggerBean,支持到指定时间运行一次,如每天24:00运行一次等。

2、创建实现类CsmsTSyslogTimer(其中的service类需要自己扩展)

 

package com.xgd.CSMS.timer;

import java.net.InetAddress;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.hibernate.Query;
import org.hibernate.Session;

import com.opensymphony.xwork2.ActionContext;
import com.xgd.CSMS.model.CsmsTSyslog;
import com.xgd.CSMS.model.CsmsTUsers;
import com.xgd.CSMS.service.ICsmsTSyslogService;
import com.xgd.CSMS.service.ICsmsTUsersService;
import com.xgd.utils.ResourceUtil;
import com.xgd.utils.SpringBeanUtil;


public class CsmsTSyslogTimer {
   
    private ICsmsTSyslogService csmsTSyslogService;
    private ICsmsTUsersService csmsTUsersService;
    private CsmsTSyslog csmsTSyslog;

    /**
     * @param csmsTSyslogService the csmsTSyslogService to set
     */
    public void setCsmsTSyslogService(ICsmsTSyslogService csmsTSyslogService) {
        this.csmsTSyslogService = csmsTSyslogService;
    }

    public void deleteSyslog(){
        //获取系统日志列表信息
        List<CsmsTSyslog> csmsTSyslogList = new ArrayList<CsmsTSyslog>();
        try{
            SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
            SimpleDateFormat dsf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date beginDate = new Date();
            Calendar date = Calendar.getInstance();
            date.setTime(beginDate);
            date.set(Calendar.DATE, date.get(Calendar.DATE) - Integer.valueOf(ResourceUtil.getStringValue("days")));//从资源文件中获取days
            Date deleteDate = df.parse(df.format(date.getTime()));
            String before=df.format(deleteDate);
            String sqlsearch = "select * from CSMS_T_SysLog where SYL_createTime <= '"+before+"'";
            csmsTSyslogList  =csmsTSyslogService.listsql(sqlsearch,CsmsTSyslog.class);
           
            if(csmsTSyslogList!= null && csmsTSyslogList.size()>0){
               
                String sql="delete  from CSMS_T_SysLog where SYL_createTime <= '"+before+"'";
                int result = csmsTSyslogService.deletesql(sql);
                 
                if(result>0){
                      System.out.println("清除系统日志成功");
                      //清除系统日志之后,相应的也要增加一条到日志中去
                      //获取用户信息
                        ICsmsTUsersService csmsTUsersService = (ICsmsTUsersService) SpringBeanUtil.getBean("csmsTUsersService");
                        CsmsTUsers csmsTUsers = (CsmsTUsers) csmsTUsersService.find("admin");
                        //将登录成功信息保存到系统日志中去
                        CsmsTSyslog syslog = new CsmsTSyslog();
                        syslog.setSylUserid(csmsTUsers);
                        InetAddress addr = InetAddress.getLocalHost();
                        String ip=addr.getHostAddress().toString();//获得本机IP
                        syslog.setSylLoginip(ip);
                        syslog.setSylOperation(dsf.format(new Date())+"系统自动清除了"+ResourceUtil.getStringValue("days")+"天前的系统日志!");
                        syslog.setSylCreatetime(new Date());
                        syslog.setSylRemark("系统操作日志");
                        ICsmsTSyslogService csmsTSyslogService = (ICsmsTSyslogService) SpringBeanUtil.getBean("csmsTSyslogService");
                        csmsTSyslogService.add(syslog);
                       
                  }else{
                      System.out.println("清除系统日志失败"); 
                  }
            }else{
                System.out.println("---系统日志无符合条件数据!---");
            }
           
        }catch(Exception ex){
            ex.printStackTrace();
        }
       
    }

    /**
     * @return the csmsTSyslog
     */
    public CsmsTSyslog getCsmsTSyslog() {
        return csmsTSyslog;
    }

    /**
     * @param csmsTSyslog the csmsTSyslog to set
     */
    public void setCsmsTSyslog(CsmsTSyslog csmsTSyslog) {
        this.csmsTSyslog = csmsTSyslog;
    }

    /**
     * @return the csmsTUsersService
     */
    public ICsmsTUsersService getCsmsTUsersService() {
        return csmsTUsersService;
    }

    /**
     * @param csmsTUsersService the csmsTUsersService to set
     */
    public void setCsmsTUsersService(ICsmsTUsersService csmsTUsersService) {
        this.csmsTUsersService = csmsTUsersService;
    }
}

2、在spring 配置文件中配置相关定时任务。

<!-- 删除系统日志定时器 -->
    <bean id="csmsTSyslogTimer" class="com.xgd.CSMS.timer.CsmsTSyslogTimer">
        <property name="csmsTSyslogService">
            <ref bean="csmsTSyslogService" />
        </property>
    </bean>

    <bean id="SyslogTimer"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="csmsTSyslogTimer" />
        </property>
        <property name="targetMethod">
            <value>deleteSyslog</value>
        </property>
    </bean>

    <bean id="doDeleteSyslog" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="SyslogTimer" />
        </property>

        <property name="cronExpression">
            <value>59 59 23 * * ?</value><!--每天晚上23:59:59执行 59 59 23 * * ?  -->
        </property>
    </bean>

 

3、启用定时任务

<bean id="doInsertAliAvRemindsTaskTriggerTaskTriggerscheduler" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
    <property name="triggers">  
       <list>         
         <ref local="doDeleteSyslog"/>
       </list>  
    </property>  
</bean>

 其他实现方式可参考:http://gong1208.iteye.com/blog/1773177

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics