SpringBoot基于mybatis-plus的定时任务实现
时间: 2023-06-02 15:02:01 浏览: 287
1. 添加依赖
在pom.xml文件中添加mybatis-plus和quartz依赖:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
```
2. 配置数据源和mybatis-plus
在application.yml中添加数据源和mybatis-plus的配置:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
# mybatis-plus配置
mybatis-plus:
# mapper文件的位置
mapper-locations: classpath*:mapper/**/*.xml
# 配置全局主键策略
global-config:
db-config:
id-type: auto
```
3. 编写定时任务
创建一个定时任务类,继承QuartzJobBean,重写executeInternal方法,实现具体的定时任务逻辑。
```java
@Component
public class MyTask extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// TODO: 定时任务逻辑
}
}
```
4. 配置定时任务
在SpringBoot启动类中添加@EnableScheduling注解,开启定时任务。
```java
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
在定时任务类中添加@Scheduled注解,配置定时任务的执行周期。
```java
@Component
public class MyTask extends QuartzJobBean {
@Scheduled(cron = "0 0 0 * * ?")
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// TODO: 定时任务逻辑
}
}
```
5. 配置定时任务调度器
在SpringBoot启动类中添加一个定时任务调度器的Bean,配置定时任务的调度规则。
```java
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean(name = "myTaskJobDetail")
public JobDetail myTaskJobDetail() {
return JobBuilder.newJob(MyTask.class).withIdentity("myTaskJob").storeDurably().build();
}
@Bean(name = "myTaskTrigger")
public Trigger myTaskTrigger() {
return TriggerBuilder.newTrigger().forJob(myTaskJobDetail())
.withIdentity("myTaskTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?"))
.build();
}
}
```
在定时任务类中不再需要添加@Scheduled注解,因为定时任务已经通过调度器配置好了执行规则。
6. 测试定时任务
在MyTask的executeInternal方法中添加一些测试代码,验证定时任务是否能够正常执行。
```java
@Component
public class MyTask extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("定时任务执行了!");
}
}
```
启动SpringBoot应用,等待到定时任务执行时间点,查看控制台输出是否有"定时任务执行了!"日志。
阅读全文