Java SpringTask定时自动化处理方法

 更新时间:2024年08月02日 12:03:42   作者:Alphamilk  
这篇文章主要介绍了Java SpringTask定时自动化处理,通过自动化,不仅可以提高工作效率和准确性,还可以释放人力资源以专注于更高价值的工作,需要的朋友可以参考下

一、自动化处理

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=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: SpringTask

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

3.3 模拟访问的Controller

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserRequestLogMapper 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 {
    @Autowired
    UserRequestLogMapper 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);
    }
}

测试:

 进行增加分钟次数:

到此这篇关于Java SpringTask定时自动化处理的文章就介绍到这了,更多相关Java SpringTask定时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 剖析Fork join并发框架工作窃取算法

    剖析Fork join并发框架工作窃取算法

    这篇文章主要为大家剖析介绍了Fork join并发框架工作窃取算法的示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 在springboot中添加mvc功能的正确姿势讲解

    在springboot中添加mvc功能的正确姿势讲解

    这篇文章主要介绍了在springboot中添加mvc功能的正确姿势,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java实现面板之间切换功能

    java实现面板之间切换功能

    这篇文章主要为大家详细介绍了java实现面板之间切换功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • spring boot如何加入mail邮件支持

    spring boot如何加入mail邮件支持

    这篇文章主要介绍了spring boot如何加入mail邮件支持,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 浅析Java中的GC垃圾回收器的意义及与GC的交互

    浅析Java中的GC垃圾回收器的意义及与GC的交互

    这篇文章主要介绍了Java中的GC垃圾回收器的意义及与其的交互,GC是Java虚拟机JVM的一项重要特性,需要的朋友可以参考下
    2015-12-12
  • Java使用Catcher捕获异常的实现

    Java使用Catcher捕获异常的实现

    本文主要介绍了Java使用Catcher捕获异常的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringBoot如何动态改变日志级别

    SpringBoot如何动态改变日志级别

    这篇文章主要介绍了SpringBoot如何动态改变日志级别,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-12-12
  • 在zuulFilter中注入bean失败的解决方案

    在zuulFilter中注入bean失败的解决方案

    这篇文章主要介绍了在zuulFilter中注入bean失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java遍历Map的5种方式实例

    Java遍历Map的5种方式实例

    Map作为Java中的一种集合,以键值对的形式存放一批数据,经常会被我们应用在项目中,下面这篇文章主要给大家介绍了关于Java遍历Map的5种方式,需要的朋友可以参考下
    2023-02-02
  • idea上提交项目到gitee 最后出现 Push rejected的问题处理方法

    idea上提交项目到gitee 最后出现 Push rejected的问题处理方法

    这篇文章主要介绍了idea上面提交项目到gitee 最后出现 Push rejected的问题处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论