Spring Boot 定时任务与异步处理

SpringBoot实现异步任务以及定时任务 在绝大多数的java应用中,很多场景都是采用的是同步的方式交互,那么一旦如果有第三方进行交互,则很有可能就会产生交互延迟的问题,那么这种时候就得考虑使用多线程,但是在Spring3以后它就已经内置了异步任务供我们使用。 阅读详情

Spring Boot 定时任务与异步处理

当你的Spring Boot项目核心功能(如接口开发、文件操作、Excel导入导出)已经完善后,自动化任务便成为提升项目实用性、降低人工成本的关键一步。日常开发中,定时清理冗余数据、凌晨自动生成报表、异步发送邮件/短信、定时同步数据等场景,都离不开定时任务与异步处理的支持。本文承接项目完善后的需求,手把手实战Spring Boot中定时任务(@Scheduled)与异步处理(@Async)的核心用法,结合定时清理、异步发送邮件等真实案例,代码可直接复制复用,帮你快速实现项目自动化,进一步提升项目专业度和实用性。

一、前置准备:环境搭建与核心配置

定时任务与异步处理均为Spring Boot原生支持的功能,无需引入额外依赖(仅异步发送邮件需添加邮件依赖),核心是通过注解开启功能、配置相关参数,适配项目自动化需求。

1.1 Maven 核心依赖

基础定时任务与异步处理无需额外依赖,仅当需要实现“异步发送邮件”案例时,添加邮件依赖即可,轻量无冗余,贴合项目完善后的扩展需求:

<!-- Spring Boot Web 核心依赖(确保项目基础运行) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 邮件依赖(仅用于“异步发送邮件”案例,可选) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

<!-- lombok 简化代码 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- 可选:数据库依赖(用于定时清理数据库数据案例) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

1.2 核心配置(application.yml)

配置定时任务线程池、异步处理线程池,以及邮件相关配置(用于案例),集中管理参数,避免默认配置导致的性能问题,适配项目生产环境需求:

spring:
  # 邮件配置(用于异步发送邮件案例,替换为自己的邮箱信息)
  mail:
    host: smtp.163.com # 邮箱SMTP服务器(163邮箱示例,QQ邮箱为smtp.qq.com)
    username: your-email@163.com # 发送者邮箱
    password: your-email-password # 邮箱授权码(不是登录密码,需在邮箱设置中开启)
    port: 465 # 端口(163邮箱465,QQ邮箱587)
    protocol: smtps # 协议,163邮箱用smtps,QQ邮箱用smtp
    properties:
      mail:
        smtp:
          ssl:
            enable: true # 开启SSL加密

# 定时任务配置(自定义线程池,避免单线程阻塞)
spring:
  task:
    scheduling:
      pool:
        size: 5 # 定时任务线程池大小,根据定时任务数量调整
        thread-name-prefix: scheduled-task- # 线程名前缀,便于日志排查
      shutdown:
        await-termination: true # 关闭时等待任务完成
        await-termination-period: 3000 # 等待时间(毫秒)

# 异步处理配置(自定义线程池,提升异步任务效率)
    execution:
      pool:
        core-size: 5 # 核心线程数
        max-size: 10 # 最大线程数
        queue-capacity: 20 # 队列容量
        keep-alive: 60 # 空闲线程存活时间(秒)
      thread-name-prefix: async-task- # 异步线程名前缀

# 数据库配置(用于定时清理案例,替换为自己的数据库信息)
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_task?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456

1.3 开启定时与异步功能(核心注解)

在Spring Boot启动类上添加两个核心注解,开启定时任务与异步处理功能,一行代码即可完成开启,简洁高效:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * 启动类:开启定时任务(@EnableScheduling)和异步处理(@EnableAsync)
 */
@SpringBootApplication
@EnableScheduling // 开启定时任务功能
@EnableAsync // 开启异步处理功能
public class SpringBootTaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootTaskApplication.class, args);
    }
}

关键注意点:1. 两个注解必须添加在启动类上(或配置类上),否则定时任务和异步处理无法生效;2. 自定义线程池不是必须的,但推荐配置,避免默认单线程导致任务阻塞(如多个定时任务同时执行,单线程会排队等待)。

二、核心实战一:@Scheduled 实现定时任务(自动化核心)

@Scheduled是Spring Boot原生定时任务注解,无需复杂配置,仅需在方法上添加注解,指定执行时间,即可实现定时执行。支持多种时间表达式(cron表达式、固定延迟、固定速率),适配不同定时场景。

2.1 @Scheduled 核心用法(3种常用方式)

创建定时任务类,通过不同注解参数,实现3种常用定时场景,覆盖大多数项目需求:

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 定时任务类(需添加@Component,交给Spring管理)
 */
@Slf4j
@Component
public class ScheduledTask {

    /**
     * 方式1:固定延迟(fixedDelay)
     * 说明:以上一次任务执行完成的时间为基准,延迟指定时间后执行下一次
     * 示例:延迟5秒执行,若上一次任务执行了3秒,那么两次任务间隔为5秒(3+5)
     */
    @Scheduled(fixedDelay = 5000) // 单位:毫秒
    public void fixedDelayTask() {
        log.info("固定延迟定时任务执行:{}", System.currentTimeMillis());
        // 模拟任务执行耗时(1秒)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 方式2:固定速率(fixedRate)
     * 说明:以上一次任务开始执行的时间为基准,每隔指定时间执行一次
     * 示例:每隔5秒执行,若上一次任务执行了3秒,那么下一次任务会在5秒时准时执行(无需等待上一次完成)
     */
    @Scheduled(fixedRate = 5000)
    public void fixedRateTask() {
        log.info("固定速率定时任务执行:{}", System.currentTimeMillis());
    }

    /**
     * 方式3:Cron表达式(最灵活,适配复杂定时场景)
     * 说明:通过Cron表达式指定具体执行时间,支持按秒、分、时、日、月、周、年配置
     * 示例:每天凌晨00:00:00执行(常用场景:定时清理、报表生成)
     * Cron表达式语法:秒 分 时 日 月 周 年(年可选)
     */
    @Scheduled(cron = "0 0 0 * * ?") // 每天0点执行
    public void cronTask() {
        log.info("Cron表达式定时任务执行:{}", System.currentTimeMillis());
    }
}

2.2 常用Cron表达式(直接复制使用)

Cron表达式是定时任务的核心,整理项目中最常用的表达式,无需手动编写,直接复制适配场景:

定时场景Cron表达式
每天凌晨0点执行0 0 0 * * ?
每天凌晨2点执行0 0 2 * * ?
每小时执行一次0 0 * * * ?
每分钟执行一次0 * * * * ?
每周一凌晨0点执行0 0 0 ? * MON
每月1号凌晨0点执行0 0 0 1 * ?

2.3 真实案例:定时清理冗余数据

项目运行一段时间后,会产生大量冗余数据(如过期日志、废弃文件记录、无效用户),手动清理繁琐且易遗漏,通过定时任务自动清理,提升项目性能。结合MyBatis-Plus实现数据库冗余数据清理:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.SysLog;
import com.example.demo.service.SysLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

/**
 * 定时清理任务(清理30天前的系统日志)
 */
@Slf4j
@Component
public class DataCleanScheduledTask {

    @Autowired
    private SysLogService sysLogService;

    /**
     * 每天凌晨0点30分,清理30天前的系统日志
     * Cron表达式:0 30 0 * * ?
     */
    @Scheduled(cron = "0 30 0 * * ?")
    public void cleanExpiredLog() {
        log.info("开始执行定时清理任务:清理30天前的系统日志");
        // 1. 计算30天前的时间
        LocalDateTime thirtyDaysAgo = LocalDateTime.now().minus(30, ChronoUnit.DAYS);
        // 2. 构建查询条件:创建时间小于30天前
        QueryWrapper<SysLog> queryWrapper = new QueryWrapper<>();
        queryWrapper.lt("create_time", thirtyDaysAgo);
        // 3. 批量删除冗余日志
        int deleteCount = sysLogService.remove(queryWrapper);
        log.info("定时清理任务执行完成,共清理冗余日志{}条", deleteCount);
    }
}

说明:SysLog为系统日志实体类,sys_log为数据库表,包含create_time(创建时间)字段,通过定时任务批量删除30天前的日志,可根据项目需求调整清理时间和清理规则(如清理无效用户、废弃文件记录等)。

三、核心实战二:@Async 实现异步处理(提升性能)

@Async是Spring Boot原生异步注解,用于实现“异步调用”——当执行某个耗时操作(如发送邮件、调用第三方接口、生成大文件)时,无需等待该操作完成,继续执行后续代码,提升接口响应速度和系统吞吐量,避免用户长时间等待。

核心原理:通过线程池异步执行标注@Async的方法,主线程无需阻塞等待,实现“并行处理”,尤其适合项目中耗时且非核心流程的操作。

3.1 @Async 核心用法(基础示例)

创建异步任务类,在需要异步执行的方法上添加@Async注解,即可实现异步处理,无需额外配置:

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 异步任务类(需添加@Component,交给Spring管理)
 */
@Slf4j
@Component
public class AsyncTask {

    /**
     * 异步方法:标注@Async,由Spring异步线程池执行
     * 说明:异步方法不能与调用方法在同一个类中(否则异步失效)
     */
    @Async
    public void asyncMethod() {
        log.info("异步方法开始执行,线程名:{}", Thread.currentThread().getName());
        // 模拟耗时操作(如发送邮件、调用第三方接口,耗时3秒)
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("异步方法执行完成");
    }
}

3.2 异步调用测试(Controller)

创建接口,调用异步方法,测试异步效果——主线程无需等待异步方法完成,直接返回响应,提升接口速度:

import com.example.demo.task.AsyncTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 异步处理测试控制器
 */
@Slf4j
@RestController
@RequestMapping("/async")
public class AsyncController {

    @Autowired
    private AsyncTask asyncTask;

    /**
     * 测试异步调用:主线程无需等待异步方法完成,直接返回
     */
    @GetMapping("/test")
    public String testAsync() {
        log.info("主线程开始执行");
        // 调用异步方法(无需等待,直接继续执行)
        asyncTask.asyncMethod();
        log.info("主线程执行完成,返回响应");
        return "异步调用已触发,主线程已返回";
    }
}

测试结果(日志输出):

主线程开始执行
主线程执行完成,返回响应
异步方法开始执行,线程名:async-task-1
异步方法执行完成

关键结论:主线程无需等待异步方法(耗时3秒)完成,直接返回响应,极大提升了接口响应速度,避免用户等待。

3.3 真实案例:异步发送邮件

项目中“发送邮件”是典型的耗时操作(需连接邮箱服务器、发送邮件),若同步发送,会导致接口阻塞,用户等待时间过长。通过@Async实现异步发送邮件,提升用户体验,结合Spring Mail实现完整案例:

3.3.1 邮件发送工具类(异步)
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 异步邮件发送工具类
 */
@Slf4j
@Component
public class AsyncMailUtil {

    @Autowired
    private JavaMailSender javaMailSender;

    // 从配置文件读取发送者邮箱
    @Value("${spring.mail.username}")
    private String fromEmail;

    /**
     * 异步发送简单邮件(文本邮件)
     * @param toEmail 接收者邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    @Async
    public void sendSimpleMail(String toEmail, String subject, String content) {
        try {
            log.info("开始异步发送邮件:接收者{},主题{}", toEmail, subject);
            // 构建邮件信息
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(fromEmail); // 发送者邮箱
            message.setTo(toEmail); // 接收者邮箱
            message.setSubject(subject); // 邮件主题
            message.setText(content); // 邮件内容
            // 发送邮件(耗时操作,异步执行)
            javaMailSender.send(message);
            log.info("邮件发送成功:接收者{}", toEmail);
        } catch (Exception e) {
            log.error("邮件发送失败:接收者{},错误信息{}", toEmail, e.getMessage());
        }
    }
}
3.3.2 邮件发送接口(Controller)
import com.example.demo.util.AsyncMailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 邮件发送控制器(异步发送)
 */
@RestController
@RequestMapping("/mail")
public class MailController {

    @Autowired
    private AsyncMailUtil asyncMailUtil;

    /**
     * 发送简单邮件(异步)
     * @param toEmail 接收者邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    @GetMapping("/send")
    public String sendMail(
            @RequestParam String toEmail,
            @RequestParam String subject,
            @RequestParam String content) {
        // 异步发送邮件,主线程直接返回
        asyncMailUtil.sendSimpleMail(toEmail, subject, content);
        return "邮件发送请求已提交,正在异步发送,请耐心等待";
    }
}

测试:访问接口http://localhost:8080/mail/send?toEmail=xxx@qq.com&subject=测试邮件&content=异步发送邮件测试,接口会立即返回响应,邮件发送操作在后台异步执行,无需用户等待。

四、定时任务与异步处理结合(高级场景)

项目中很多场景需要“定时任务 + 异步处理”结合,比如:定时(每天凌晨)异步发送批量邮件、定时异步生成报表并推送,既实现自动化,又避免任务阻塞。

示例:每天凌晨1点,异步发送批量通知邮件(避免单封邮件发送耗时导致整体任务阻塞):

import com.example.demo.util.AsyncMailUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;

/**
 * 定时+异步结合:每天凌晨1点,异步发送批量邮件
 */
@Slf4j
@Component
public class ScheduledAsyncTask {

    @Autowired
    private AsyncMailUtil asyncMailUtil;

    // 模拟需要发送邮件的用户列表
    private final List<String> emailList = Arrays.asList(
            "user1@163.com", "user2@163.com", "user3@163.com"
    );

    /**
     * 每天凌晨1点执行定时任务,异步发送批量邮件
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void scheduledAsyncSendMail() {
        log.info("开始执行定时异步邮件发送任务");
        // 循环发送邮件,每封邮件异步执行,避免阻塞
        for (String email : emailList) {
            asyncMailUtil.sendSimpleMail(
                    email,
                    "每日通知",
                    "您好,这是每日定时推送的通知邮件,无需回复~"
            );
        }
        log.info("定时异步邮件发送任务提交完成,后续由异步线程执行");
    }
}

核心优势:定时任务触发批量操作,每一个耗时的子操作(发送单封邮件)异步执行,既实现了自动化,又提升了任务执行效率,避免单线程阻塞导致的任务延迟。

五、常见问题与解决方案(项目落地避坑)

  1. @Scheduled定时任务不执行?

    解决方案:① 检查启动类是否添加@EnableScheduling注解;② 定时任务类是否添加@Component注解(交给Spring管理);③ 方法必须是无参、无返回值的public方法;④ 避免在定时方法上添加@Async(若需异步,可在方法内部调用异步方法)。
    
  2. @Async异步方法失效?

    解决方案:① 检查启动类是否添加@EnableAsync注解;② 异步方法类是否添加@Component注解;③ 异步方法不能与调用方法在同一个类中(Spring AOP代理机制限制);④ 方法必须是public方法,不能是private、static方法。
    
  3. 定时任务阻塞(多个任务排队执行)?

    解决方案:配置定时任务线程池(spring.task.scheduling.pool.size),设置足够的线程数,避免单线程阻塞;同时避免定时任务执行时间过长。
    
  4. 异步发送邮件失败,提示“授权码错误”?

    解决方案:① 确认邮箱授权码正确(不是登录密码,需在邮箱设置中开启SMTP服务,获取授权码);② 检查邮箱SMTP服务器、端口配置是否正确(如163邮箱host为smtp.163.com,端口465);③ 开启SSL加密(spring.mail.properties.mail.smtp.ssl.enable=true)。
    
  5. 项目部署后,定时任务执行时间偏差?

    解决方案:① 确认服务器时间与本地时间一致(避免时区问题);② 若使用Docker部署,确保Docker容器时间与宿主机时间同步;③ 检查Cron表达式是否正确。
    

六、总结(项目自动化提升)

本文承接项目核心功能完善后的需求,完整实战了Spring Boot定时任务(@Scheduled)与异步处理(@Async)的核心用法,结合定时清理冗余数据、异步发送邮件等真实案例,帮你实现项目自动化,提升项目实用性和性能,核心要点总结:

  • 定时任务(@Scheduled):通过3种方式(固定延迟、固定速率、Cron表达式)实现自动化任务,适配不同定时场景,核心是@EnableScheduling注解开启功能;

  • 异步处理(@Async):通过注解实现耗时操作的异步执行,提升接口响应速度,核心是@EnableAsync注解开启功能,避免异步方法与调用方法同包同类;

  • 场景结合:定时任务+异步处理,实现更复杂的自动化场景(如批量邮件推送、定时报表生成),既自动化又高效;

  • 项目落地:配置自定义线程池,避免任务阻塞;排查常见问题,确保功能稳定运行,适配生产环境。

掌握本文内容后,你可以轻松将定时任务与异步处理集成到自己的项目中,实现自动化清理、异步通知、定时报表等功能,进一步完善项目,降低人工成本,提升项目专业度和用户体验,让项目更具竞争力。

SpringBoot 异步任务+定时任务(附源码) 既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。 阅读详情

相关推荐

Mybatis Provider注解实现批量插入

需求 借助mybatis 的provider实现一个比较通用的,批量插入数据接口。 Mapper接口 第一参数为需要批量插入的数据,第二个参数为对应实体类的class public interface BaseDao<T> { @InsertProvider(type = BaseProvider.class, method = "batchInsert") int batchInsert(@Param("lists") List<T&gt

小楼夜听雨的博客 2417

使用线程池异步执行定时任务

最近项目中需要做一个定时任务在某个固定的时间去执行一个任务,由于该定时任务的代码量已经超出可读性规范,并且处于性能的考虑,故使用线程池来做一个异步执行的方法。

Java学习博客 1201

HPE磁盘阵列管理04——MSA事件

本文介绍了HPE MSA存储系统的事件处理机制,重点分析了常见磁盘故障事件及其解决方案。文章首先定义了MSA事件的五个严重级别(严重、错误、警告、信息和解决),然后详细列举了多个典型事件案例(如事件1、3、6、8、172等),包括每种事件的触发条件、对系统的影响以及具体修复步骤。针对磁盘故障场景,文章提供了更换磁盘、重建磁盘组、取消隔离等操作建议,并强调应及时配置备用磁盘以降低数据风险。最后指出更详细的事件说明可参考《MSA事件描述参考指南》,并提供了HPE官方手册下载链接。全文为技术人员处理MSA存储故障

istrangeboy&begin zero的博客 1117

【Springboot中的异步方法、定时任务、方法重试】

本文主要记录下Springboot中异步方法,定时任务以及方法重试的使用,异步方法,定时任务以及方法重试在项目中还是经常会使用到的,使用的方式也比较简单,通过本文可以实现基本的使用,自己的学习笔记,如有错误请多指正。

qq_43495421的博客 2062

某教育平台线上用户流失分析

本项目基于某教育平台的用户登录信息、用户个人信息以及用户课程学习记录三信息表,挖掘了平台流量以及用户流失等信息。使用python对数据进行预处理,使用tableau进行数据可视化分析。该教育平台正值窗口期,平台流量没有良好的留存水平,但有良好的发展趋势,需要深入分析用户留存率低,做好招新促活营销。该教育平台的基本盘在广东、湖北、河南、贵州等省份,线上教育的潜在用户可能更多分布在线下教育资源不充足、受疫情影响更为严重的地区。

fhy12的博客 1299

百度智能云训练图像分割模型+python调用模型并分割图像

目录 训练模型阶段 发布图像分割API 调用图像分割API 创建应用后显示以下两个代码 在pycharm中可以调用API mask解码 依赖库pycocotools安装步骤: 依赖库urllib2的安装 源码下载: 最近上课听老师介绍了一个训练图像分割模型的网站,把数据集上传之后做图像标注,然后进行训练就能得到准确率等指标。 训练模型阶段 图像分割:https://ai.baidu.com/easydl/vision/ 图像分割-->创建模型-->上传数据--&gt

icecreamdinner的博客 1388

springboot+task整合(定时任务)

使用@Scheduled开启定时任务,可以通过内置的属性来指定执行的时间规则,也可以使用CRON表达式。1.使用springboot自带的定时任务需要在启动类上添加注解。@EnableAsync // 启用异步任务。@EnableScheduling // 启用定时任务。2.如果是异步定时任务则需要配置线程池。3 .异步定时任务示例。4.异步定时任务测试。

qq_44981598的博客 505

Aurix TC387 Ethernet代码解析之二_移植

英飞凌官方仅提供了TC397的例程,故需通过TC397例程来移植到TC387新建工程里。TC397官方例程名称【Ethernet_1_KIT_TC397_TFT】,网络上可以免费获取到,此处不赘述。使用工具【

m0_69929716的博客 884

Spring Boot 整合定时任务和异步任务处理

1.定时任务 Spring Boot 使用注解方式开启定时任务,分为3步 1)启动类里面加上 @EnableScheduling 注解开启定时任务,自动扫描标记了@Scheduled 注解的方法 @SpringBootApplication @EnableScheduling public class BaseProjectApplication { publ...

weixin_30783629的博客 133

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1305

解决anaconda占用C盘空间过多问题

anaconda就算安装在其他盘,默认会把索引、锁定文件、压缩包等都放到系统盘(C盘),我用了两年,占用30GB。 1. 卸载不用的虚拟环境 查看已安装的虚拟环境 conda env list 卸载不用的、过期的虚拟环境 conda remove -n (要卸载的环境的名字) --all 2. 删除索引缓存、锁定文件、未使用过的包和tar包 conda clean -a 清理完之后,删除了15GB,还剩15GB,舒服了 ...

沉迷单车的追风少年 3万+

Spring Boot 定时任务与异步处理最佳实践

Bean});@Getter定时任务和异步处理是构建高性能、高可用应用的重要组成部分。通过合理配置线程池、实现异常处理机制、确保任务幂等性和添加监控告警,可以构建健壮的任务调度系统。在实际项目中,应根据业务需求选择合适的调度策略,并不断优化性能和可靠性。

alex_goden的博客 1007

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

提升Spring Boot应用性能:掌握异步处理与任务调度

在构建现代Web应用程序时,提高系统的响应速度和吞吐量是至关重要的。除了优化数据库查询、使用缓存等手段外,合理利用异步处理和任务调度也是提升系统性能的有效途径之一。Spring Boot 提供了强大的支持来简化这些操作,本文将详细介绍如何在 Spring Boot 应用中实现异步方法调用以及定时任务调度。登录后复制@Component1.2.3.4.5.6.7.8.9.10.这里fixedRate表示每隔60秒执行一次任务。你还可以使用其他属性如cron。

qq_35485206的博客 900

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Spring Boot 2.0学习之旅-10】SpringBoot整合定时任务和异步任务处理

第十章 SpringBoot整合定时任务和异步任务处理 10-1 SpringBoot定时任务schedule讲解 1.定时器比较 什么是定时任务,使用场景 ? 比如八月十五,定时任务会轮询,加载到任务区里面,去检测 比如电商系统,下单量、访客、交易量,用于数据分析 某个时间定时处理某个任务 发邮件、短信等 消息提醒 订单通知 统计报表系统 … 常见定时任务 Java自带的java.util.Timer类配置比较麻烦,时间延后问题,有些BUG Quartz框架: 配置更简单,xml或者注解适合分布式或

Mind_programmonkey的博客 866

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Boot 定时任务以及异步任务的实现

在 Spring Boot 中,实现异步任务非常简单,主要通过 @Async 注解和 TaskExecutor 接口来实现。异步任务适用于需要并发执行的场景,例如发送邮件、处理文件、调用外部 API 等。在 Spring Boot 中,实现定时任务非常简单,主要通过 @Scheduled 注解和 TaskScheduler 接口来实现。使用 @Async 注解创建异步任务。处理异步任务的返回值。

qq_33807380的博客 1206

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring boot 异步/定时任务/邮件

Spring boot 异步/定时任务/邮件:一、异步功能1:启动类添加注解:@EnableAsync   //开启异步注解功能2:方法上添加://告诉Spring这是一个异步方法 @Async public void hello(){    try {        Thread.sleep(3000);   } catch (InterruptedException e) {    ...

yangliuhbhd的博客 1552

springboot的异步任务、定时任务的简单案例

异步任务简单案例 在我们开发项目时,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时会造成前台响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。 1. 新建一个service包 2. 创建AsyncService类 @Service public class AsyncService { public void hello(){ try { Thread.sleep(3000);

L_GRAND_ORDER的博客 2142

springboot定时任务,邮件发送,异步任务

一:邮件发送 1引pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 集成了有pom <dependency> <groupId>com.sun.mail</groupId>

kang1011的博客 212

SpringBoot系列—异步任务与定时任务(十四)

个人博客:haichenyi.com。感谢关注 异步任务   什么时候用异步,就是耗时操作的时候就可以用到异步,比如:批量处理数据,批量发邮件等等。   用法与前面的事务管理类似,spring 3+之后,就已经内置了 @Async 来处理异步任务。我们使用两个注解即可。 @EnableAysnc 启动类上开启基于注解的异步任务 @Aysnc 标识的方法会异步执行 如: @EnableAsync...

海晨忆的博客 314

超强异步处理:pig系统@Async实战指南,性能提升300%

还在为系统日志记录、定时任务执行阻塞主线程而烦恼吗?pig系统通过Spring Boot的@Async注解,完美解决了异步处理的痛点!本文将带你深入理解pig系统的异步处理实践,让你轻松掌握高性能异步编程技巧。 阅读本文,你将获得: - ✅ @Async核心原理与配置方法 - ✅ pig系统三大异步监听器实战解析 - ✅ 异步任务异常处理最佳实践 - ✅ 性能优化与线程池配置指南 ## 异

gitblog_00034的博客 1046

Spring Boot 异步与任务调度

异步处理是指在不阻塞主线程的情况下执行某些操作,适合处理耗时任务(如文件上传、网络请求等)。默认情况下,@Async使用。为了提高性能,可以配置自定义线程池。

Flying_Fish_roe的博客 1288

Springboot 实现 异步,邮件,定时任务

任务 1.异步任务 新建一个项目 , 勾选web依赖 创建一个类AsyncService 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。 编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况; @Service public class AsyncService { public void hello(){ try {

weixin_52891794的博客 787

Spring Boot中使用@Async实现异步调用

什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) ...

小飞侠的博客 3080
上一篇: Spring Boot + EasyExcel 实现 Excel 导入导出(实战篇)
下一篇: Spring Boot 缓存优化:Redis 实战
码客日记
博客等级 码龄6年 149粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值