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

Java SpringTask定时自动化处理

目录

一、自动化处理

1.1 什么是自动化处理

1.2 SpringTask介绍

二、SpringTask的基本使用

2.1 引入依赖

2.2 通过控制台加入注解启用SpringTask

2.3 使用Cron表达式规定时间

2.4 通过@Schedule(Cron表达式) 实现定时任务(每两秒执行一次)

三、实战

3.1 创建一个交互表

3.2 引入mybatis-plus 并配置数据库

3.3 模拟访问的Controller

3.4 设置定时任务


一、自动化处理

1.1 什么是自动化处理

        自动化处理是指使用软件工具或程序自动执行原本需要人工干预的任务。这些任务可以是重复性的、耗时的或者需要高度准确性的操作。通过自动化,不仅可以提高工作效率和准确性,还可以释放人力资源以专注于更高价值的工作。

1.2 SpringTask介绍


二、SpringTask的基本使用

2.1 引入依赖

由于springTask 是SpringFramWork包的内容,所以不需要进行引入新的依赖。

2.2 通过控制台加入注解启用SpringTask

@SpringBootApplication
@EnableScheduling
public class SpringTaskApplication {public static void main(String[] args) {SpringApplication.run(SpringTaskApplication.class, args);}}

2.3 使用Cron表达式规定时间

如果不会使用Cron表达式的使用可以直接使用cron的生成网站

https://cron.qqe2.com/

常用cron表达式:

2.4 通过@Schedule(Cron表达式) 实现定时任务(每两秒执行一次)

@Component
@Slf4j
public class springTaskTest {//    每两秒执行一次@Scheduled(cron = "0/2 * * * * ?")public void AutoTask(){log.info("自动化代码执行中");}}


三、实战

要求实现一个用户与AI助手对话交互表,要求一个用户一天最多能对话200次,并且为了控制并发量,每个用户在一分钟之内最多进行对话十次。

3.1 创建一个交互表

CREATE TABLE user_request_log (user_id BIGINT NOT NULL,request_date DATE NOT NULL,total_requests INT DEFAULT 200,minute_requests INT DEFAULT 10,minute_start_time DATETIME,PRIMARY KEY (user_id, request_date),INDEX idx_minute_start_time (minute_start_time)
);
  • user_id: 用户ID,作为主键的一部分,类型为BIGINT
  • request_date: 当天的日期,作为主键的一部分,类型为DATE
  • total_requests: 当天的总请求次数,类型为INT,默认值为0。
  • minute_requests: 当前分钟的请求次数,类型为INT,默认值为0。
  • minute_start_time: 当前分钟开始的时间戳,类型为DATETIME
  • 主键由user_idrequest_date组成,以确保每个用户每天的记录唯一。
  • 添加了一个索引idx_minute_start_time以加快按minute_start_time查询的速度。

3.2 引入mybatis-plus 并配置数据库

依赖:

        <!--        数据库依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

application.yml

spring:# 数据源配置datasource:url: jdbc:mysql://localhost:3306/ap_security?characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverapplication:name: SpringTask

使用mybatis-plus快速生成实体与架构

3.3 模拟访问的Controller

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {@AutowiredUserRequestLogMapper userRequestLogMapper;//    模拟进行对话@GetMapping("/chat")public String Chat(){UserRequestLog userRequestLog = userRequestLogMapper.selectById(1);//        当有次数时候才能进行对话if (userRequestLog.getTotalRequests()>0 && userRequestLog.getMinuteRequests()>0){
//            减去数量userRequestLog.setMinuteRequests(userRequestLog.getMinuteRequests()-1);userRequestLog.setTotalRequests(userRequestLog.getTotalRequests()-1);userRequestLogMapper.updateById(userRequestLog);return "对话成功";}else {return "您暂时已经没有对话次数了";}}}

3.4 设置定时任务

@Component
@Slf4j
public class springTaskTest {@AutowiredUserRequestLogMapper userRequestLogMapper;//    每一分钟执行一次@Scheduled(cron = "0 0/1 * * * ?")public void AutoTask(){log.info("执行增加分钟对话次数");UserRequestLog userRequestLog = userRequestLogMapper.selectById(1);userRequestLog.setMinuteRequests(20);userRequestLogMapper.updateById(userRequestLog);}//    每天凌晨3点执行一次@Scheduled(cron = "0 0 3 * * ?")public  void DayAuto(){log.info("执行增加天数的总次数");UserRequestLog userRequestLog = userRequestLogMapper.selectById(1);userRequestLog.setTotalRequests(200);userRequestLogMapper.updateById(userRequestLog);}}

测试:

 进行增加分钟次数:

 


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 装修新选择:探索浦东地区口碑排名前五的大平层装修公司!
  • 本地node搭建web服务器
  • Redis 典型应用-缓存
  • Phalco安装过程以及踩的一些坑(mac环境)
  • 直播狂欢下的隐忧|专题报告集
  • 深入解读人工水母算法:原理、实现与应用
  • 鸿蒙开发所有装饰器
  • C++|设计模式(七)|⭐️观察者模式与发布/订阅模式,你分得清楚吗
  • 2024河南萌新联赛第(三)场 河南大学
  • 自闭症儿童上普校真的好吗
  • 基于boost asio实现的定时器
  • C++后端开发找了一个MFC桌面开发的实习(已投降)
  • 【软件设计书】详细设计说明书和概要设计说明书(Word原件直接套用)
  • idea的git与SVN切换
  • 前端初期知识点回顾
  • #Java异常处理
  • Android Studio:GIT提交项目到远程仓库
  • avalon2.2的VM生成过程
  • css系列之关于字体的事
  • EventListener原理
  • github指令
  • gitlab-ci配置详解(一)
  • JavaScript-Array类型
  • Javascript编码规范
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • overflow: hidden IE7无效
  • Redash本地开发环境搭建
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 关于 Cirru Editor 存储格式
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 简单基于spring的redis配置(单机和集群模式)
  • 讲清楚之javascript作用域
  • 离散点最小(凸)包围边界查找
  • 力扣(LeetCode)56
  • 聊聊flink的BlobWriter
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用agvtool更改app version/build
  • 思维导图—你不知道的JavaScript中卷
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • # include “ “ 和 # include < >两者的区别
  • # SpringBoot 如何让指定的Bean先加载
  • ## 1.3.Git命令
  • #etcd#安装时出错
  • (1)(1.13) SiK无线电高级配置(五)
  • (10)ATF MMU转换表
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Java入门)学生管理系统
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (独孤九剑)--文件系统
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)