转载

12.Spring实现定时器功能之方式二

需求分析

上文已经提到,本文就直接略过,到配置即代码实现了哈

配置文件

1.pom jar包导入

<!--spring定时器包-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>${org.springframework.version}</version>
</dependency>

<!-- 定时调度 -->
<dependency>
  <groupId>quartz</groupId>
  <artifactId>quartz</artifactId>
  <version>1.5.2</version>
</dependency>

2.Spring配置文件

<!--开启定时任务的注解支持-->
<task:annotation-driven />

<!--注解配置-->
<context:annotation-config/>
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<!--定时任务的具体类或包名,其实就是定位到你执行定时任务所在类的包-->
<context:component-scan base-package="cn.arvin.aisell.booktask"></context:component-scan>

代码实现

1.建立相应的业务类

我这里的话,做了两个,一个是每天晚上十二点定时将用户密码错误次数清零,以便于第二天能够正常登录,二个是每月十五号清空回收站,这里的业务逻辑自己随意定义,只要在上述的包里面,可以任意写实现的方法都可以

@Component
public class BookTask {

    /**
     * 注入发送邮件的核心对象
     */
    @Autowired
    private JavaMailSender javaMailSender;


    /**
     *  注入与共service对象,用于每天定时恢复密码可以访问
     */
    @Autowired
    private IEmployeeService employeeService;

    /**
     *  注入回收站service对象用于定时清空回收站
     */
    @Autowired
    private IEmployee_BackupService employee_backupService;


    /**
     *  设置定时任务每天零点设置密码错误次数为0
     */
    @Scheduled(cron = "0 0 0 * * ?")
    public void scheduleTask(){

        employeeService.setErrorNum();

    }

    /**
     *  每月15号清空回收站
     */
    @Scheduled(cron="0 15 10 15 * ?")
    public void myTest(){
        employee_backupService.clear();
    }
}

2.建立一个启动类,即程序的入口,这个类同样放 cn.arvin.aisell.booktask 这个包下面即可

@Component
public class Application {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

3.在开启tomcat服务器之后,点击启动改程序即可

结语

对于两种方式而言,有不同的使用场景,如果你的定时任务很少,只有一两个,那么第一种方式肯定更加适合你,因为配置简单方便;那么如果你的定时任务有很多,推荐使用第二种,虽然看起来配置麻烦一点点,会多几行代码,但是你想,如果有很多个类的定时任务,只需要在这个包下main写业务逻辑并加上注解即可,根本不需要配置过多的xml文件,个人推荐第二种,有备无患嘛,万一后来PM改需求增加...当然,按需拿取,看个人爱好!

原文  https://segmentfault.com/a/1190000021986257
正文到此结束
Loading...