SSM定时任务

spring定时任务(@Scheduled注解)


首先

有时会遇到要求程序在某个时间点定时执行的需求,例如每日凌晨计算昨日销量等。上网查,发现@Scheduled注解可以用上。需要在springMVC里使用spring的定时任务,下面介绍一下方法


其次

1、springmvc.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:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    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/aop
    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/mvc    
    http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
	http://www.springframework.org/schema/task 
	http://www.springframework.org/schema/task/spring-task-4.1.xsd">

	<context:component-scan base-package="com.xxx.**.controller" />  
	
    <!-- 执行线程池配置 -->
    <task:executor id="executor" pool-size="5" /> 
    <!-- 配置定时任务的线程池,调度线程池配置 -->
    <task:scheduler id="scheduler" pool-size="10" /> 
    <!-- 启用注解驱动的定时任务,定时任务配置 scheduler 方式 注解 -->
    <task:annotation-driven executor="executor" scheduler="scheduler" />

(1)xmlns加一行
xmlns:task=“http://www.springframework.org/schema/task

(2)xsi:最后加两行
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd

(3)启用注解驱动的定时任务1
<task:annotation-driven executor=“executor” scheduler=“scheduler” />

2、写定时任务

这里直接写在了controller文件夹里,放在包扫描的路径下2
cron表达式里写执行的时机

@Component
public class TimerTask {
	
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;
	
	@Autowired
	private TimerTaskService timerTaskService;
	
    /**
     * 定时执行
     * 数据分析,需每日计算昨日新增量
     */
    @Scheduled(cron = "0 0 0 * * ?")//执行时间(每天0点)
    public void dataAnalysis(){
        System.out.println("开始执行");
        /***************************这里面是想要执行的方法***********************/
    	try {
        	//获取缓存中“todayData”,用来存入“yesterdayData”
            Map<Object,Object> yesterdayData = redisTemplate.opsForHash().entries("todayData");  
            System.out.println("通过entries(H key)方法获取变量中的键值对:" + yesterdayData);  
            //将其存入“yesterdayData”缓存中
            redisTemplate.opsForHash().putAll("yesterdayData", yesterdayData);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("缓存中今日数据转昨日数据失败"); 
		}
    	Map<Object, Object> todayData = timerTaskService.getCounter();
    	redisTemplate.opsForHash().putAll("todayData", todayData);
    	System.out.println("执行结束");
    }
}

最后
参考


  1. task:scheduler和task:executor的解析 ↩︎

  2. 包扫描 ↩︎

SSM项目中使用Quartz进行定时任务可以按照以下步骤进行操作: 1. 配置依赖:在项目的`pom.xml`文件中添加Quartz的依赖。例如: ```xml<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 创建定时任务类:在您的SSM项目中创建一个定时任务类,可以命名为`JobScheduleTask`。该类需要实现Quartz的`Job`接口,并实现其中的`execute`方法。在`execute`方法中编写定时任务的逻辑代码。 ```javapublic class JobScheduleTask implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 定时任务的逻辑代码 // ... } } ``` 3. 配置定时任务触发器:创建一个触发器类,可以命名为`JobScheduleTrigger`。在该类中,使用Quartz的`TriggerBuilder`来配置定时任务触发器的属性,例如执行时间、周期等。 ```javapublic class JobScheduleTrigger { public static Trigger createTrigger() { return TriggerBuilder.newTrigger() .withIdentity("jobScheduleTrigger") .withSchedule(CronScheduleBuilder.cronSchedule("000/1 * * ?")) // 每小时执行一次 .build(); } } ``` 4. 配置定时任务调度器:创建一个调度器类,可以命名为`JobScheduleScheduler`。在该类中,使用Quartz的`SchedulerFactory`来创建调度器实例,并配置相关属性,如数据源、任务存储等。然后使用调度器的`scheduleJob`方法将定时任务和触发器关联起来,并启动调度器。 ```javapublic class JobScheduleScheduler { public static void startScheduler() throws SchedulerException { SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); JobDetail jobDetail = JobBuilder.newJob(JobScheduleTask.class) .withIdentity("jobScheduleTask") .build(); Trigger trigger = JobScheduleTrigger.createTrigger(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } } ``` 5. 在Spring配置文件中配置调度器:在您的Spring配置文件(如`applicationContext.xml`)中,将定时任务调度器配置为一个Bean,并在其中调用`JobScheduleScheduler.startScheduler()`方法。 ```xml<bean id="jobScheduleScheduler" class="com.example.JobScheduleScheduler" init-method="startScheduler" /> ``` 6. 启动项目:启动您的SSM项目,定时任务调度器会根据配置的触发器时间和周期执行定时任务的逻辑。 请注意,以上步骤仅提供了一个基本示例,您可以根据实际需求进行修改和扩展。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值