使用SchedulingConfigurer做定时任务的缺陷是什么?
时间: 2024-01-10 14:54:43 浏览: 24
使用SchedulingConfigurer接口实现定时任务的缺陷是,当使用DynamicScheduledTask方法根据页面设置动态修改定时器的cron参数后,需要等到下一次到达定时任务的时间才会调用新的触发时间。这导致页面设置的时间不能即时生效,不符合用户的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [浅谈springboot项目中定时任务如何优雅退出](https://blog.csdn.net/weixin_35256923/article/details/114727914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
写一段实现 SchedulingConfigurer 接口定时任务代码示例
好的,以下是一个实现 SchedulingConfigurer 接口的定时任务代码示例:
```
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
@EnableScheduling
public class MySchedulingConfigurer implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addFixedRateTask(() -> {
// 在这里编写定时任务的具体逻辑
System.out.println("定时任务执行了!");
}, 100); // 每隔 100 毫秒执行一次
}
}
```
希望这个示例能够帮助你实现定时任务。
spring boot中使用QuartzJobBean+SchedulingConfigurer实现动态添加定时任务
好的,下面是详细的步骤:
1. 首先,我们需要在pom.xml中添加Quartz的依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
```
2. 创建一个Job类,继承QuartzJobBean,并实现executeInternal方法。该方法就是我们要执行的任务逻辑。
```
public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
// 任务逻辑
}
}
```
3. 创建一个实现SchedulingConfigurer接口的定时任务配置类。该类中可以动态添加定时任务,也可以从数据库、配置文件等读取定时任务。
```
@Configuration
public class QuartzConfig implements SchedulingConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 从数据库或配置文件中读取定时任务
// ...
// 动态添加定时任务
taskRegistrar.addTriggerTask(
() -> {
MyJob myJob = applicationContext.getBean(MyJob.class);
myJob.executeInternal(null);
},
triggerContext -> {
// 定时任务表达式
CronTrigger cronTrigger = new CronTrigger("0/5 * * * * ?");
return cronTrigger.nextExecutionTime(triggerContext);
}
);
}
}
```
4. 在Spring Boot主类上加上@EnableScheduling注解,启用定时任务。
```
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
这样,我们就可以使用QuartzJobBean+SchedulingConfigurer实现动态添加定时任务了。