`
wedtlcy
  • 浏览: 24111 次
  • 性别: 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

分享到:
评论

相关推荐

    java写定时任务,定时任务、定时器详细示例

    Java中的定时任务与定时器是实现自动化操作的关键技术之一,特别是在需要周期性执行某些功能的场景下,如数据同步、日志清理、定时发送邮件等。本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util....

    基于spring-boot+quartz的CRUD动态任务管理系统

    【Spring Boot + Quartz 动态任务管理系统的构建】 在IT行业中,Spring Boot和Quartz是两个非常重要的组件,常用于构建高效、稳定的后台服务。Spring Boot简化了Spring框架的配置和初始化过程,使得开发者可以快速...

    基于Spring Boot的后台权限管理系统.zip

    系统日志 Redis监控 Redis终端 网络资源 One一个 散文 绘画 语文 天气查询 影视资讯 即将上映 正在热映 每日一文 任务调度 定时任务 调度日志 技术选型 后端 基础框架Spring Boot 2.0.4.R

    Spring Boot是一个由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程 以

    - **批处理应用程序**:对于需要执行批量数据处理、报表生成或定时任务等应用场景,Spring Boot 也提供了相应的支持。 - **数据访问应用程序**:与各类数据存储技术(如关系型数据库、NoSQL数据库、缓存系统等)的...

    spring-ldap-1.3.1.RELEASE-with-dependencies.zip

    2. `spring-context-support-3.x.y.jar`: 提供了对邮件、定时任务、缓存等的Spring支持,可能作为Spring LDAP的依赖。 3. `spring-beans-3.x.y.jar`, `spring-core-3.x.y.jar`, `spring-expression-3.x.y.jar`: ...

    基于SSM框架,通过spring注解的方式,实现redis的数据缓存机制,将mysql的数据缓存到redis数据库.zip

    在IT行业中,数据缓存是提高系统性能的关键技术之一,特别是在高并发的互联网应用中。本项目主题聚焦于“基于SSM框架,通过spring注解的方式,实现redis的数据缓存机制,将mysql的数据缓存到redis数据库”,这涉及到...

    Springcloud微服务

    - **SpringCloud**:建立在SpringBoot之上,是一套用于构建云应用的微服务工具集,旨在为开发者提供在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、...

    BAT大厂高频面试题:Redis+JVM+微服务+并发+Spring+MyBatis.docx

    - **RDB(Redis Database Backup)**:在指定的时间点将内存中的数据集快照写入磁盘。优点是可以快速恢复数据,缺点是可能会丢失最近的数据。 - **AOF(Append Only File)**:记录每次写操作,重启后可以从 AOF ...

    企业管理(完整系统)

    Quartz或Spring Task可以用来执行定时任务,如自动备份、数据统计等。 总的来说,【企业管理(完整系统)】是一个集成了多种技术的综合性管理平台,通过SSM+EasyUI的组合,为企业提供了高效、易用的管理工具,并且...

    【ssm项目源码】电商网站后台管理系统.zip

    可能会集成Quartz或Spring Task等任务调度框架,用于实现定时任务,比如定期清理过期订单、统计销售数据等。 10. **日志管理**: 日志记录是系统监控和问题排查的重要工具,项目可能使用Log4j或Logback等日志框架...

    springboot学习demo

    Spring Boot是由Pivotal团队开发的,旨在简化Spring应用的初始搭建以及开发过程,它通过提供默认配置来消除大量的XML配置,并且集成了大量常用的第三方库配置,如数据源、JPA、定时任务等。 1. **Spring Boot核心...

    基于SpringBoot的综测可视化管理系统的研究与设计.docx

    - **数据收集**:可以通过定时任务或消息队列机制实现自动化数据收集。 - **数据处理**:利用 Spring Boot 的批处理能力或者集成 Apache Spark 等大数据处理框架完成数据的清洗和转换。 - **数据展示**:采用 ...

    synapse-purge-源码.rar

    4. **调度和执行机制**:Purge工具需要有计划地执行清理任务,可能依赖于定时任务框架,如Quartz或Spring的ScheduledTask。这部分代码将涉及任务调度和执行的逻辑。 5. **异常处理和恢复机制**:在清理过程中可能会...

    友盟消息推送Java springboot

    在实际应用中,通常会根据业务需求创建定时任务来定期发送消息,而不是等待前端请求。这里我们可以利用SpringBoot的`@Scheduled`注解来实现定时任务: ```java @Component @EnableScheduling public class PushTask...

    Java项目-基于SSM的天下陶网络商城.zip

    6. **任务调度**:如Quartz或Spring Task,用于定时任务,如定期清理过期数据。 7. **日志管理**:如Log4j或Logback,记录应用运行过程中的信息,便于问题排查。 **项目开发流程:** 1. **需求分析**:明确商城的...

    基于SSM的图书借阅系统源码.zip

    以上是对“基于SSM的图书借阅系统”可能涉及的主要技术点的详尽介绍,实际项目可能还包括其他诸如缓存管理、定时任务、邮件服务等扩展功能。通过学习和实践这个项目,开发者可以深入理解SSM框架的整合应用,提升自己...

    springboot-learning-example-master.zip

    SpringBoot通过内嵌Servlet容器(如Tomcat或Jetty),自动配置Spring框架以及提供默认配置来消除大量的起步配置工作。 2. **自动配置**: SpringBoot的核心特性之一是自动配置。它会根据项目依赖自动设置Bean,如...

    微服务架构专题-SpringBoot.pptx

    - **定时任务与重试策略**:SpringBoot内置了Quartz或Spring Scheduler等框架,可用来创建定时任务。同时,通过配置可以实现失败任务的重试策略。 2. **Zookeeper与Dubbo微服务**: - **Zookeeper**:Zookeeper是...

    struts2 annotation 批量下载

    在给定的代码中,虽然没有直接展示删除逻辑,但通常会使用多线程或定时任务来监控并清理这些临时文件,以保证系统的高效运行。 ### 日期时间处理与字符编码 在批量下载过程中,可能需要处理日期时间格式化以及字符...

    Java开源项目热门推荐.pdf

    日志框架方面,文档提到了Quartz,这是一个功能强大的开源作业调度系统,可以用来创建简单或复杂的作业调度,如定时任务的执行等。Quartz可以集成到几乎任何的Java应用中,它的强大之处在于对作业调度的诸多控制和...

Global site tag (gtag.js) - Google Analytics