当前位置: 首页 > wzjs >正文

浙江省建设厅网站查询湛江今日头条

浙江省建设厅网站查询,湛江今日头条,自己做的网站源码如何安装,首码项目网发布平台各位被Thread.sleep()和while(true)折磨的Spring道友们!今天要解锁的是Spring生态自带的定时任务三件套——Scheduled、TaskScheduler、Async定时组合技!无需引入外部依赖,轻松实现从简单定时到分布式调度的全场景覆盖!准备好抛弃…

各位被Thread.sleep()while(true)折磨的Spring道友们!今天要解锁的是Spring生态自带的定时任务三件套——@ScheduledTaskScheduler@Async定时组合技!无需引入外部依赖,轻松实现从简单定时到分布式调度的全场景覆盖!准备好抛弃Quartz的复杂配置了吗? ⏰


一、筑基篇:@Scheduled基础用法

1.1 开启定时任务(激活灵脉)
@SpringBootApplication
@EnableScheduling // 关键注解!放在启动类上
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
1.2 定时方法配置(三套仙术)
@Component
public class MyTask {// 1. 固定速率(上次开始后间隔固定时间)@Scheduled(fixedRate = 5000) // 每5秒执行public void task1() {System.out.println("固定速率任务:" + LocalDateTime.now());}// 2. 固定延迟(上次结束后间隔固定时间)@Scheduled(fixedDelay = 3000) // 每次执行完等3秒public void task2() throws InterruptedException {Thread.sleep(1000); // 模拟耗时System.out.println("固定延迟任务:" + LocalDateTime.now());}// 3. Cron表达式(天庭历法)@Scheduled(cron = "0 0/5 9-18 * * MON-FRI") // 工作日9-18点每5分钟public void task3() {System.out.println("Cron任务:" + LocalDateTime.now());}
}

二、金丹篇:高级配置技巧

2.1 动态修改定时规则(天机可变)
@RestController
public class TaskController {@Autowiredprivate ScheduledTaskRegistrar taskRegistrar;@PostMapping("/update-task")public String updateTask(@RequestParam String newCron) {// 取消原有任务taskRegistrar.destroy();// 添加新任务taskRegistrar.addCronTask(() -> System.out.println("动态任务执行: " + LocalDateTime.now()),newCron);taskRegistrar.afterPropertiesSet();return "任务已更新为: " + newCron;}
}
2.2 异步定时任务(分身术)
@Configuration
@EnableAsync // 开启异步支持
public class AsyncConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.initialize();return executor;}
}@Component
public class AsyncTask {@Async@Scheduled(fixedRate = 3000)public void asyncTask() {System.out.println("异步任务线程:" + Thread.currentThread().getName());}
}

三、元婴篇:分布式定时任务

3.1 基于Redis的分布式锁(防重复执行)
@Component
public class DistributedTask {@Autowiredprivate RedissonClient redisson;@Scheduled(cron = "0 0/5 * * * ?")public void distributedJob() {RLock lock = redisson.getLock("scheduled:lock");try {if (lock.tryLock(0, 30, TimeUnit.SECONDS)) {System.out.println("获取锁成功,执行任务...");// 业务代码...}} finally {if (lock.isHeldByCurrentThread()) {lock.unlock();}}}
}
3.2 结合ShedLock实现(推荐)
<!-- 添加依赖 -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.42.0</version>
</dependency>
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-jdbc-template</artifactId><version>4.42.0</version>
</dependency>
@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "10m")
public class ShedLockConfig {@Beanpublic LockProvider lockProvider(DataSource dataSource) {return new JdbcTemplateLockProvider(dataSource);}
}@Service
public class ShedLockTask {@Scheduled(cron = "0 0/5 * * * ?")@SchedulerLock(name = "reportTask", lockAtLeastFor = "5m")public void scheduledTask() {// 保证同一时间只有一个实例执行}
}

四、化神篇:监控与管理

4.1 暴露执行端点(Spring Boot Actuator)
# application.yml
management:endpoints:web:exposure:include: scheduledtasksendpoint:scheduledtasks:enabled: true

访问/actuator/scheduledtasks查看所有定时任务:

{"cron": [{"runnable": {"target": "com.example.MyTask.task3"},"expression": "0 0/5 9-18 * * MON-FRI"}],"fixedDelay": [],"fixedRate": []
}
4.2 自定义任务监控(天眼通)
@Bean
public ScheduledTaskPostProcessor taskPostProcessor() {return new ScheduledTaskPostProcessor() {@Overridepublic void postProcessAfterInitialization(Object bean, String beanName) {// 监控所有定时任务初始化System.out.println("已加载定时任务: " + beanName);}};
}

五、大乘篇:最佳实践

5.1 任务执行日志记录
@Aspect
@Component
public class TaskLogAspect {@Around("@annotation(scheduled)")public Object logTask(ProceedingJoinPoint pjp, Scheduled scheduled) throws Throwable {String taskName = pjp.getSignature().toShortString();long start = System.currentTimeMillis();try {System.out.println("任务开始: " + taskName);return pjp.proceed();} finally {System.out.printf("任务结束: %s, 耗时: %dms%n", taskName, System.currentTimeMillis() - start);}}
}
5.2 异常处理策略
@Scheduled(fixedRate = 5000)
public void errorProneTask() {try {// 业务代码...} catch (Exception e) {// 1. 记录异常到数据库// 2. 发送报警邮件// 3. 根据策略决定是否重试System.err.println("任务执行失败: " + e.getMessage());}
}

渡劫指南:常见问题

问题解决方案
任务不执行检查@EnableScheduling是否启用
Cron表达式无效使用在线工具校验表达式
多任务串行执行配置TaskScheduler线程池
分布式环境重复执行集成ShedLock或Redis分布式锁
时区问题设置spring.task.scheduling.pool.size

http://www.dtcms.com/wzjs/461675.html

相关文章:

  • 建设一个网站需要哪些员工个人网站seo入门
  • 机箱做的网站主机怎么查看ftp域名注册流程和费用
  • 开发区网站建设公司亚马逊seo关键词优化软件
  • 转 如何用java做网站手机seo关键词优化
  • 郑州网站建设汉狮有没有专门做营销的公司
  • 做lol直播网站石家庄疫情最新消息
  • 临安市规划建设局网站站长工具同大全站
  • 危险网站怎么办北京网上推广
  • 交互网站怎么做搜索关键词优化服务
  • 网站建设技术有哪些软文外链购买平台
  • 湖北企业模板建站开发2021年经典营销案例
  • 网站建设需要英语吗如何注册一个域名
  • 单位网站建设与管理域名停靠网页推广大全2021
  • 温江做网站如何开发一个软件平台
  • 做数学题好的网站互联网营销师教材
  • 域名备案 没有网站吗识图
  • 快速建站实例演示完整版系统优化大师
  • 中文域名交易网站搜索引擎营销的实现方法
  • WordPress添加QQ咨询西安自动seo
  • 无锡哪家做网站好整站优化外包服务
  • 杭州 网站开发公司新疆头条今日头条新闻
  • 公司网站建设注意点深圳seo优化推广
  • 怎样做网站制作做营销型网站的公司
  • 网站新闻不收录哪些广告平台留号码
  • 最近在线观看免费完整版高清韩剧唐山seo排名外包
  • 宁波做网站设计灰色词排名接单
  • 公众号建网站整合营销传播方案案例
  • 怎样做网络销售网站百度前三推广
  • 网站修改思路四平网络推广
  • 邯郸营销型网站解析域名网站