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

举报
红目香薰 发表于 2022/05/28 17:13:43 2022/05/28
【摘要】 ​ ​编辑Spring+SpringMVC+Mybatis(开发必备技能)05、task任务配置目录1、创建spring-task.xml配置文件2、在applicationContext.xml的spring配置文件中引入spring-task.xml配置文件3、创建测试文件【单独创建com.item.task文件夹】 说不定需要很多定时任务呢4、启动查看效果5、常用的一些cron的tas...

 编辑

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配置文件

编辑

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

<?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配置文件

 <!-- 引入task定时器配置文件 -->
    <import resource="spring-task.xml"/>

编辑

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

编辑

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出来

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

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

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

每隔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"

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

(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点执行。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。