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定时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 面向对象和面向过程的区别(动力节点java学院整理)

    面向对象和面向过程的区别(动力节点java学院整理)

    很多朋友不清楚面向对象和面向过程有什么区别,接下来小编给大家整理了关于面向对象和面向过程的区别讲解,感兴趣的朋友可以参考下
    2017-04-04
  • Hadoop环境配置之hive环境配置详解

    Hadoop环境配置之hive环境配置详解

    这篇文章主要介绍了Hadoop环境配置之hive环境配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • java压缩多个文件并且返回流示例

    java压缩多个文件并且返回流示例

    这篇文章主要介绍了java压缩多个文件并且返回流示例,返回压缩流主是为了在程序里再做其它操作,需要的朋友可以参考下
    2014-03-03
  • java实习--每天打卡十道面试题!

    java实习--每天打卡十道面试题!

    临近秋招,备战暑期实习,祝大家每天进步亿点点!本篇文章准备了十道java的常用面试题,希望能够给大家提供帮助,最后祝大家面试成功,进入自己心仪的大厂
    2021-07-07
  • Java8 使用 stream().sorted()对List集合进行排序的操作

    Java8 使用 stream().sorted()对List集合进行排序的操作

    这篇文章主要介绍了Java8 使用 stream().sorted()对List集合进行排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 浅谈maven的jar包和war包区别 以及打包方法

    浅谈maven的jar包和war包区别 以及打包方法

    下面小编就为大家分享一篇浅谈maven的jar包和war包区别 以及打包方法,具有很好的参考价值,希望对大家有所帮助
    2017-11-11
  • Java实现两人五子棋游戏(五) 判断是否有一方胜出

    Java实现两人五子棋游戏(五) 判断是否有一方胜出

    这篇文章主要为大家详细介绍了Java实现两人五子棋游戏,判断是否有一方胜出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java后端配置允许跨域方式

    Java后端配置允许跨域方式

    本文介绍了在不同技术和框架中配置跨域资源共享(CORS)的方法,包括使用SpringMVC的@CrossOrigin注解、SpringBoot的全局CORS配置、SpringSecurity中的CORS集成以及手动设置响应头,根据具体需求和技术栈,选择合适的方法来确保跨域请求的安全性和有效性
    2025-02-02
  • MyBatis 实现多对多中间表插入数据

    MyBatis 实现多对多中间表插入数据

    这篇文章主要介绍了MyBatis 实现多对多中间表插入数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java非公平锁知识点实例详解

    java非公平锁知识点实例详解

    在本篇文章里小编给大家整理了一篇关于java非公平锁知识点实例详解,有兴趣的朋友们可以学习参考下。
    2021-10-10

最新评论