Spring+SpringMVC+Mybatis(开发必备技能)05、task任务配置

2022-11-30 16:33:38 浏览数 (1)

Spring SpringMVC Mybatis(开发必备技能)05、task任务配置

目录

1、创建spring-task.xml配置文件

2、在applicationContext.xml的spring配置文件中引入spring-task.xml配置文件

3、创建测试文件【单独创建com.item.task文件夹】 说不定需要很多定时任务呢

4、启动查看效果

5、常用的一些cron的task时间


项目源码:https://download.csdn.net/download/feng8403000/85484925

1、创建spring-task.xml配置文件

编码如下:看自己的包名修改一下就可以。

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.2.xsd">
    <!-- 设置定时任务 -->
    <task:annotation-driven/>
    <!-- base-package放的是你要定时的那个类所在的包路径-->
    <context:component-scan base-package="com.item"></context:component-scan>
</beans>

2、在applicationContext.xml的spring配置文件中引入spring-task.xml配置文件

代码语言:javascript复制
 <!-- 引入task定时器配置文件 -->
    <import resource="spring-task.xml"/>

3、创建测试文件【单独创建com.item.task文件夹】 说不定需要很多定时任务呢

代码语言:javascript复制
package com.item.task;

import com.item.dao.UsersMapper;
import com.item.model.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Controller
public class Test {

    @Autowired
    private UsersMapper usersMapper;
    //编写定时任务,每1分钟输出一次·觉得慢可以换成"*/5 * * * * ?"每5秒
    @Scheduled(cron = "0 */1 * * * ?")
    public void run(){
        Date dd=new Date();
        //格式化
        SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time=sim.format(dd);
        List<Users> list = usersMapper.GetInfo();
        System.out.println(time   "的task任务run了一下。并输出了所有users表的数据:" list);
    }

}

4、启动查看效果

配置完成,唯一需要注意的就是咱们在处理service层的时候无法获得spring中的bean对象的问题,这类问题咱们单独new出来

代码语言:javascript复制
//autowaire注入无效解决方案,直接创建,但是问题用的时间长了会很影响性能
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
insuranceService = (InsuranceService) ac.getBean("InsuranceServiceImpl");

5、常用的一些cron的task时间

有在线的时间生成器,可以自己搞定哦。

代码语言:javascript复制
每隔5秒执行一次任务:  "*/5 * * * * ?"

每隔1分钟执行一次任务:  "0 */1 * * * ?"

每天23点执行一次任务:  "0 0 23 * * ?"

每天凌晨1点执行一次任务:  "0 0 1 * * ?"

每月1号凌晨1点执行一次任务:  "0 0 1 1 * ?"

每月1号凌晨2点执行一次任务:  "0 0 2 1 * ? *"

每月最后一天23点执行一次任务:  "0 0 23 L * ?"

每周星期天凌晨1点执行一次任务:  "0 0 1 ? * L"

可以看着理解一下各种符号。 

代码语言:javascript复制
(1)* 表示可以匹配该域的所有值;

例如,"0 0 13 * * ?"表示每天的13点执行一次。

(2)?在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;

它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;

例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。

(3)- 表示匹配该域上的一个范围;

例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。

(4), 表示枚举值;

例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。

(5)/ 表示起始时间和间隔时间;

例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,

"*/5 * * * * ?"表示每隔5秒钟执行一次,"0 */1 * * * ?"表示每隔1分钟执行一次。

(6)# 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;

例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。

(7)L 只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;

例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。

0 人点赞