Springboot2 定时任务Quartz

本文介绍如何使用Spring Boot结合Quartz实现定时任务功能。通过配置pom.xml引入所需依赖,并在主类中定义定时任务表达式及具体执行命令,最后通过自定义QuartzJob类完成任务的具体逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时任务是经常性的开发需求,也可以作为运维工具,周期性的处理某些运维工作。

一、pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.demo</groupId>
  <artifactId>cron</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-quartz</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

二、SpringBoot主类

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class CronApplication {

	@Value("${cron.expr}")
	private String cron;

	@Value("${cron.command}")
	private String command;

	public static void main(String[] args) {
		SpringApplication.run(CronApplication.class, args);
	}

	@Bean
	public JobDetail sampleJobDetail() {
		return JobBuilder.newJob(SampleJob.class).withIdentity("sampleJob")
				.usingJobData("command", command).storeDurably().build();
	}

	@Bean
	public Trigger sampleJobTrigger() {
		CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule(cron);
		return TriggerBuilder.newTrigger().forJob(sampleJobDetail())
				.withIdentity("sampleTrigger").withSchedule(builder).build();
	}

}

三、QuartzJob 类


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SampleJob extends QuartzJobBean {
	Logger log = LoggerFactory.getLogger(SampleJob.class);

	private String command;

	// Invoked if a Job data map entry with that name
	public void setCommand(String command) {
		this.command = command;
	}

	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
		log.info(String.format("begin: %s!", this.command));
		try {
			Process p = Runtime.getRuntime().exec(command);
			InputStream is = p.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
			p.waitFor();
			if (p.exitValue() != 0) {
				log.info("execute error.");
			}

			String s = null;
			while ((s = reader.readLine()) != null) {
				log.info(s);
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		log.info("execute end.");
	}
}

四、application.properties

cron.expr=0/20 * * * * ?
cron.command=d:/tmp/db_backup.bat

logging.file=d:/tmp/cron.log
logging.level.root=WARN
logging.level.com.yinww.cron=INFO
logging.file.max-size=10MB
logging.file.max-history=20

整体代码都比较简单,不做过多解释。

本文内容到此结束,更多内容可关注公众号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值