手动触发定时任务

本文介绍了如何在Java中手动触发定时任务,包括使用ScheduledExecutorService进行定时任务的创建和控制,以及在程序运行时动态调整任务的执行策略。

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


@RestController
@RequestMapping("/api")
public class Controller {

    private final Logger logger = LoggerFactory.getLogger(Controller.class);

    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }
	
	private Map<Integer, ScheduledFuture<?>> taskMap = new HashMap<>();


    /**
     * 开启方案,并且手动触发定时任务
     *
     * @return
     */
    @PostMapping("/startScheduler/{id}")
    public Map<String, Object> startScheduler(@PathVariable Integer id) {
        logger.info("REST request to startScheduler===>:" + id);
        Map<String, Object> result = new HashMap<>();
		//业务代码已删除,这里只展示定时任务相关代码
		//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
		//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
### Spring 中 `@Scheduled` 注解的使用 在 Spring 应用程序中,通过 `@Scheduled` 注解可以轻松实现定时任务的功能。为了使该功能生效,在主应用程序类上需添加 `@EnableScheduling` 注解来开启调度支持[^1]。 下面是一个完整的例子展示如何配置以及创建简单的定时任务: #### 主应用启动类 ```java @SpringBootApplication @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 此段代码定义了一个标准的 Spring Boot 启动入口并启用了计划任务的支持。 #### 创建带有时效性的服务组件 接下来定义一个带有具体业务逻辑的服务组件,并在其内部的方法前加上 `@Scheduled` 来指定执行的时间间隔或其他触发条件: ```java @Component public class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); // 每隔5秒运行一次固定速率的任务 @Scheduled(fixedRate = 5000) public void reportCurrentTime() { log.info("The time is now {}", new Date()); } // 延迟3秒后开始每7秒重复一次的任务 @Scheduled(initialDelay = 3000, fixedRate = 7000) public void delayedTask() { log.info("Delayed task executed at {}", new Date()); } // 使用cron表达式的复杂时间模式 @Scheduled(cron = "0 0 * * * ?") public void scheduledTaskUsingCronExpression() { log.info("This will run every hour on the hour"); } } ``` 上述示例展示了三种不同类型的定时策略:基于固定的频率(`fixedRate`)、先延迟再按周期循环(`initialDelay`, `fixedRate`) 和更复杂的 cron 表达式用于精确控制何时应该触发特定事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值