Spring-@Scheduled

本文介绍了Spring框架中定时任务的配置方法,包括XML配置、启用注解驱动及线程池配置,并通过一个用户黑名单封号的具体案例展示了@Scheduled注解的应用。
@Scheduled:定时任务的注解

定时任务的配置:
1.xml配置
添加task的xml的命名空间
xmlns:task="http://www.springframework.org/schema/task"   
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd  
2.启用注解驱动的定时任务
<task:annotation-driven scheduler="threadPoolTaskScheduler"/>
3.配置定时任务的线程池(如果不配线程池,默认定时任务为单线程)
<bean id="threadPoolTaskScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
<property name="poolSize" value="16"/>
<property name="threadNamePrefix" value="taskScheduler_"/>
<property name="awaitTerminationSeconds" value="10"/>
</bean>

代码:
package com.caocao.web.job;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


/**
* 用户黑名单封号Task
* Created by tangchenglong on 2016/8/24.
*/
@Component
public class CustomerFreezeTask {

private Logger logger = LoggerFactory.getLogger(CustomerFreezeTask.class);

@Scheduled(cron = "* 0/2 * * * ?")
public void queryCustomerBlackListToFreeze(){
//操作
}

}
源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
<think>我们正在讨论Spring框架中的@Scheduled注解的使用方法。@Scheduled注解用于标记一个方法,使其能够以固定的时间间隔执行,或者按照cron表达式指定的时间执行。以下是使用@Scheduled的基本步骤和示例: ### 1. 启用定时任务 首先,在Spring配置类上添加`@EnableScheduling`注解,以启用定时任务的支持。 ```java @Configuration @EnableScheduling public class AppConfig { // 配置类内容 } ``` ### 2. 创建定时任务方法 在需要定时执行的方法上添加`@Scheduled`注解,并指定执行策略(如固定延迟、固定速率或cron表达式)。 #### 示例1:固定延迟(fixedDelay) 在上一次任务执行完成后,延迟固定时间再执行下一次任务。 ```java @Component public class ScheduledTasks { @Scheduled(fixedDelay = 5000) // 单位毫秒,即5秒 public void taskWithFixedDelay() { // 任务逻辑 } } ``` #### 示例2:固定速率(fixedRate) 以固定的速率执行任务,无论上一次任务是否完成。 ```java @Scheduled(fixedRate = 5000) // 每5秒执行一次 public void taskWithFixedRate() { // 任务逻辑 } ``` #### 示例3:初始延迟(initialDelay) 配合fixedRate或fixedDelay使用,设置第一次执行的延迟时间。 ```java @Scheduled(initialDelay = 1000, fixedRate = 5000) public void taskWithInitialDelay() { // 第一次执行在启动后延迟1秒,之后每5秒执行一次 } ``` #### 示例4:cron表达式 使用cron表达式定义复杂的执行计划。 ```java @Scheduled(cron = "0 0 9 * * ?") // 每天上午9点执行 public void taskWithCronExpression() { // 任务逻辑 } ``` ### 3. cron表达式说明 - 格式:`秒 分 时 日 月 周 [年]`(年可选) - 示例: - `0 0 * * * ?`:每小时执行一次 - `0 0 12 * * ?`:每天中午12点执行 - `0 0 8-10 * * ?`:每天8点、9点、10点执行 ### 注意事项: 1. 定时任务方法不能有参数,也不能有返回值(返回类型应为void)。 2. 默认使用单线程执行所有定时任务,若任务执行时间较长可能阻塞后续任务。可配置`TaskScheduler`线程池解决。 §§相关问题§§ 1. 如何配置多个@Scheduled任务使用不同的线程池执行? 2. 如果某个定时任务执行时间过长,导致后续任务被延迟,应如何避免? 3. 在分布式环境中,如何防止多个实例同时执行同一个定时任务? 4. 如何动态修改已经设定的@Scheduled任务的执行时间?</think>### Spring `@Scheduled` 使用指南 `@Scheduled` 是 Spring 框架中用于定时任务的注解,支持三种调度方式:固定延迟(fixedDelay)、固定速率(fixedRate)和 cron 表达式。以下是具体用法: #### 1. **启用定时任务** 在配置类添加 `@EnableScheduling`: ```java @Configuration @EnableScheduling public class SchedulerConfig { } ``` #### 2. **定义定时任务方法** 在 Bean 的方法上使用 `@Scheduled`: ```java @Component public class MyScheduler { // 方式1:固定延迟(上次任务结束后延迟执行) @Scheduled(fixedDelay = 5000) // 单位:毫秒(5秒) public void taskWithFixedDelay() { System.out.println("Fixed Delay Task: " + new Date()); } // 方式2:固定速率(按固定频率执行,无视上次任务状态) @Scheduled(fixedRate = 3000) // 每3秒执行 public void taskWithFixedRate() { System.out.println("Fixed Rate Task: " + new Date()); } // 方式3:cron表达式(灵活控制时间) @Scheduled(cron = "0 0 9 * * ?") // 每天9:00执行 public void taskWithCron() { System.out.println("Cron Task: " + new Date()); } } ``` #### 3. **关键参数说明** | **参数** | **说明** | |------------------|--------------------------------------------------------------------------| | `fixedDelay` | 上次任务结束到下次任务开始的间隔(毫秒) | | `fixedRate` | 两次任务开始时间的间隔(毫秒) | | `initialDelay` | 首次任务延迟启动时间(需配合 `fixedDelay`/`fixedRate` 使用) | | `cron` | UNIX cron 表达式,如 `"0 15 10 * * ?"`(每天10:15执行) | | `zone` | 时区(默认系统时区),如 `"Asia/Shanghai"` | #### 4. **cron 表达式规则** - 格式:`秒 分 时 日 月 周 [年]` - 示例: - `0 * * * * ?`:每分钟的0秒执行 - `0 0 12 * * ?`:每天12:00执行 - `0 0 8-18 * * MON-FRI`:工作日的8:00-18:00每小时执行 #### 5. **注意事项** - 任务方法需为 `void` 无参方法 - 默认单线程执行,需用 `@Async` 或自定义线程池避免阻塞 - 生产环境建议使用分布式调度框架(如 Quartz)替代
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值