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

网站开发课题研究背景长春做网站好的公司

网站开发课题研究背景,长春做网站好的公司,免费空间+网站空间+虚拟主机,北京活动策划公司黄页在 Spring Boot 中实现定时任务主要依赖于Scheduled注解和 Spring 调度器。 基本概念 定时任务,简单来说就是在特定的时间点或按照一定的时间间隔自动执行的任务。在 Spring Boot 中,实现定时任务主要依赖于 Spring 框架提供的 Scheduled 注解和 TaskSc…

在 Spring Boot 中实现定时任务主要依赖于@Scheduled注解和 Spring 调度器。

基本概念


定时任务,简单来说就是在特定的时间点或按照一定的时间间隔自动执行的任务。在 Spring Boot 中,实现定时任务主要依赖于 Spring 框架提供的 @Scheduled 注解和 TaskScheduler 接口。@Scheduled 注解可以方便地将一个方法标记为定时执行的任务,而 TaskScheduler 则负责任务的调度和执行。

Cron是一个字符串,由7个字段组成,使用空格隔开 ,用于指定定时任务的执行时间。也称为七子表达式

字段取值范围说明
0-59*/10
0-59
0-236-16
1-31
1-12
星期0-70和7都表示星期日
1970~2099此项非必需,可以省略

使用以下特殊字符来指定执行时间:

  • 星号(*):表示匹配该字段的所有可能值

  • 问号(?):表示不关心该字段具体的值

  • 斜线(/):表示指定一个间隔

  • 逗号(,):表示列举多个值

  • 连字符(-):表示指定一个范围

Cron表达式在线生成器:在线Cron表达式生成器

一、定时任务核心实现

1. 核心注解与配置
  • @Scheduled:标记方法为定时任务,支持多种触发方式(Cron、固定速率 / 延迟等)。
  • @EnableScheduling:在启动类中启用定时任务功能。
  • 线程池配置:默认单线程,建议通过ThreadPoolTaskScheduler配置多线程。
@SpringBootApplication
@EnableScheduling // 启用定时任务
public class RuoYiApplication {public static void main(String[] args) {SpringApplication.run(RuoYiApplication.class, args);}
}@Component
public class AttendanceCheckTask {@Autowiredprivate ISysDeptService sysDeptService;// 每天18点10分执行(Cron表达式)@Scheduled(cron = "0 10 18 * * ?")public void checkMonthlyAttendance() {// 任务逻辑}
}
2. Cron 表达式详解
  • 结构秒 分 时 日 月 周(共 6 个字段)。
  • 示例
    • 0 0 1 * * ?:每天凌晨 1 点。
    • 0 30 8 ? * 1-5:工作日早上 8:30。
    • 0 0 0 1 * ?:每月 1 号 0 点。
3. 线程池配置
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar registrar) {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();scheduler.setPoolSize(10); // 线程池大小scheduler.setThreadNamePrefix("Attendance-Scheduler-");registrar.setTaskScheduler(scheduler);}
}

二、用户代码实现分析

1. 核心业务逻辑
@Component
public class AttendanceCheckTask {@Autowiredprivate IAttendanceRecordService attendanceRecordService;@Autowiredprivate ISysNoticesService sysNoticesService;@Autowiredprivate ISysUserService sysUserService;@Autowiredprivate ISysDeptService sysDeptService;@Scheduled(cron = "0 10 18 * * ?")public void checkMonthlyAttendance() {// 1. 获取上月考勤数据List<Map<String, Object>> userList = attendanceRecordService.selectUsersWithNormalDaysLastMonth();// 2. 遍历生成公告for (Map<String, Object> user : userList) {Long userId = (Long) user.get("userId");Integer normalDays = ((Long) user.get("normalDays")).intValue();// 3. 查询用户和部门信息SysUser sysUser = sysUserService.selectUserById(userId);if (sysUser == null) {logger.warn("用户ID {} 不存在,跳过", userId);continue;}String deptName = sysDeptService.selectDeptById(sysUser.getDeptId()).getDeptName();String userName = sysUser.getNickName();// 4. 生成公告内容String noticeContent = String.format("🎉 %s 部门的 %s 同志,在上月以 **%d 天全勤** 表现优异!\n" +"你的坚持是团队的榜样,继续加油!",deptName, userName, normalDays);// 5. 保存公告saveNotice(noticeContent);}}private void saveNotice(String content) {SysNotices notice = new SysNotices();notice.setNoticeTitle("月度全勤标兵表彰");notice.setNoticeType("2");notice.setNoticeContent(content);notice.setStatus("0");notice.setCreateBy("system");sysNoticesService.insertSysNotices(notice);}
}
2. 关键技术点
  • 部门名称获取:通过ISysDeptService查询部门信息。
  • 用户昵称获取:通过ISysUserService查询用户昵称。
  • 公告内容优化:使用部门名称和用户昵称替代用户 ID。

三、高级特性与优化

1. 动态调整 Cron 表达式
@Configuration
public class DynamicCronConfig implements SchedulingConfigurer {private volatile String cronExpression = "0 10 18 * * ?";@Overridepublic void configureTasks(ScheduledTaskRegistrar registrar) {registrar.addTriggerTask(this::checkMonthlyAttendance,triggerContext -> {CronTrigger trigger = new CronTrigger(cronExpression);return trigger.nextExecutionTime(triggerContext);});}// 通过API或配置中心修改cronExpressionpublic void updateCron(String newCron) {this.cronExpression = newCron;}
}
2. 异常处理与重试
@Component
public class AttendanceCheckTask {private static final Logger logger = LoggerFactory.getLogger(AttendanceCheckTask.class);@Scheduled(cron = "0 10 18 * * ?")public void checkMonthlyAttendance() {try {// 核心逻辑} catch (Exception e) {logger.error("定时任务执行失败:", e);// 重试逻辑(如调用Feign接口触发重试)}}
}

 3. 分布式定时任务方案

  • XXL-JOB:可视化管理界面,支持分布式调度
// 引入依赖
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.1</version>
</dependency>// 配置执行器
@Component
public class XxlJobConfig {@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {XxlJobSpringExecutor executor = new XxlJobSpringExecutor();executor.setAdminAddresses("http://xxl-job-admin:8080/xxl-job-admin");executor.setAppname("ruoyi-attendance");executor.setAddress("");return executor;}
}// 定义任务
@XxlJob("attendanceCheckJob")
public ReturnT<String> execute(String param) {// 任务逻辑return ReturnT.SUCCESS;
}

四、最佳实践与注意事项

  1. 线程安全:避免在任务中修改共享状态,必要时使用@Async异步处理。
  2. 数据库优化
    • 为考勤查询添加索引:ALTER TABLE attendance_record ADD INDEX idx_month (user_id, year, month);
    • 分页查询:selectUsersWithNormalDaysLastMonth方法添加分页参数。
  3. 监控与日志
    • 集成 Spring Boot Actuator:management.endpoints.web.exposure.include=health,info,scheduledtasks
    • 日志记录:在任务开始和结束时记录关键信息。
  4. 性能调优
    • 使用缓存:将部门和用户信息缓存到 Redis。
    • 异步处理:将公告生成和保存逻辑异步化。

五、总结

Spring Boot 的定时任务实现简单高效,通过@Scheduled注解和线程池配置即可满足大部分需求。对于复杂场景(如分布式调度、动态配置),可结合 XXL-JOB 等框架扩展。在实际开发中,需注意线程安全、数据库性能和异常处理,确保任务稳定可靠运行。

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

相关文章:

  • 庐山网站建设在哪网站可以做农信社模拟试卷
  • 百盛联合建设集团有限公司网站网络商城应该如何推广
  • 建立内部网站结构设计软件有哪些
  • 怎么建设h5网站北京新情况最新消息今天
  • 避免网站侵权网站优化成本
  • 最近做网站开发有前途没百度搜索引擎竞价排名
  • 网站建设广告平台推广WordPress邮件代发
  • 微信网站服务器要求网站建设工作描述
  • 免费网站制作教程wordpress流主题
  • 玉溪市规划建设局网站怎样在各大网站发布信息
  • 休闲食品网站建设目的北京赛车网站开发公司
  • 专注网站建设11年一年级贺卡制作图片 简单
  • 合江县住房建设规划局网站网站开发人才储备
  • 天河建设网站外包h5视频直播源码
  • 南宁网站建设公司如何为老板打造网站赚钱的电子政务门户网站建设的意义
  • 摄影图片网站中信建设有限责任公司龙芳
  • 有哪些漫画做的好的网站好建德建设局官方网站
  • 校内网站建设与维护如何安装免费wordpress主题
  • 花瓣是模仿哪个网站wordpress 4.8.3 漏洞
  • 商业活动的网站建设亲子网 网站正在建设中
  • 百度 医疗网站建设智邦国际erp系统登录
  • 现在手机网站用什么做有阿里云主机管理平台如何自己做网站
  • 招聘网站可以做劳务派遣吗ppt在哪个软件制作
  • 制作推广网站大型网站建设的难点是什么
  • 怎样建设国外网站大型网上购物商城
  • 最经济 网站建设创意服装设计
  • 做网站湘潭网站和服务器是什么
  • 一站式装修公司排名百度快照推广排名
  • 电脑做网站服务器视频教程.net网站开发的例子
  • 做网站要做相应的app吗seo投放营销