SpringBoot1.x 任务

文章源码

异步任务

在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的。但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用

多线程来完成此类任务,其实,在 Spring 3.x 之后,就已经内置了 @Async 来完美解决这个问题。

  • AsyncService.java

    /**
    * @Author : parzulpan
    * @Time : 2021-01
    * @Desc :
    */ @Service
    public class AsyncService { @Async // 告诉 Spring 这是一个异步方法
    public void hello() {
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("数据处理中");
    }
    }
  • AsyncController.java

    /**
    * @Author : parzulpan
    * @Time : 2021-01
    * @Desc :
    */ @Service
    public class AsyncService { @Async // 告诉 Spring 这是一个异步方法
    public void hello() {
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("数据处理中");
    }
    }
  • 主配置类开启异步注解支持

    @EnableAsync    // 开启异步注解支持
    @SpringBootApplication
    public class IntegrationTaskApplication {}

定时任务

项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring 为我们提供了异步执行任务调度的方式,提供

TaskExecutorTaskScheduler 接口。

  • ScheduleService.java

    /**
    * @Author : parzulpan
    * @Time : 2021-01
    * @Desc :
    */ @Service
    public class ScheduleService { /**
    * cron 表达式
    *
    * second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几).
    * 示例:0 * * * * 0-6 代表从周日到周六,每分钟的第0秒执行
    *
    * 常用:
    * 【0 0/5 14,18 * * ?】 每天 14 点整,和 18 点整,每隔 5 分钟执行一次
    * 【0 15 10 ? * 1-6】 每个月的周一至周六 10:15 执行一次
    * 【0 0 2 ? * 6L】 每个月的最后一个周六凌晨 2:00 执行一次
    * 【0 0 2 LW * ?】 每个月的最后一个工作日凌晨 2:00 执行一次
    * 【0 0 2-4 ? * 1#1】 每个月的第一个周一凌晨2:00 到 4:00期间,每个整点都执行一次;
    */
    // @Scheduled(cron = "0 * * * * 0-6")
    // @Scheduled(cron = "0,1,2,3,4 * * * * 0-6")
    // @Scheduled(cron = "0-4 * * * * 0-6")
    @Scheduled(cron = "0/4 * * * * 0-6") // 每 4 秒执行一次
    public void runHello() {
    System.out.println("runHello...");
    }
    }
  • 主配置类开启定时任务注解支持

    @EnableScheduling   // 开启定时任务注解支持
    @EnableAsync // 开启异步注解支持
    @SpringBootApplication
    public class IntegrationTaskApplication {}
  • cron 表达式

    字段 允许值 允许的特殊字符
    0-59 , - * /
    0-59 , - * /
    小时 0-23 , - * /
    日期 1-31 , - * ? / L W C
    月份 1-12 , - * /
    星期 0-7 或 SUN-SAT,0 和 7 都是 SUN , - * ? / L C #
  • 特殊字符

    • , 枚举
    • - 区间
    • * 任意
    • / 步长
    • ? 日/星期冲突匹配
    • L 最后
    • W 工作日
    • C 和 calendar 联系后计算过的值
    • # 星期,4#2,第2个星期四

邮件任务

邮件发送需要引入 spring-boot-starter-mail,SpringBoot 自动配置 MailSenderAutoConfiguration,然后定义 MailProperties 内容,配置在配置文件中,IOC 容器会自动装配 JavaMailSender。

  • 加入依赖

            <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
  • 编辑配置文件

    spring:
    mail:
    username: 1129768687@qq.com
    password: wiacrbulowhhgagh # 使用授权码
    host: smtp.qq.com
    # properties:
    # mail.smtp.ssl.enable: true # 开启 smtp 服务器
  • 编写测试文件

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class IntegrationTaskApplicationTests { @Autowired
    JavaMailSenderImpl javaMailSender; @Test
    public void sendSimpleMail() {
    // 定义一个简单邮件消息
    SimpleMailMessage message = new SimpleMailMessage(); // 邮件设置
    message.setSubject("通知-明天放假"); // 标题
    message.setText("2020年元旦节放假一天~"); // 内容
    message.setTo(new String[]{"parzulpan@163.com", "parzulpan@gmail.com"});
    message.setFrom("1129768687@qq.com"); // 发送
    javaMailSender.send(message);
    } @Test
    public void sendMimeMail() throws MessagingException {
    // 定义一个复杂邮件消息
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true); // 邮件设置
    helper.setSubject("通知-后天放假");
    helper.setText("<b style='color:red'> 2020年元旦节放假三天~ </b>", true);
    helper.setTo(new String[]{"parzulpan@163.com", "parzulpan@gmail.com"});
    helper.setFrom("1129768687@qq.com"); // 上传附件
    helper.addAttachment("hello.java", new File("src/main/resources/static/hello.java"));
    helper.addAttachment("猫.png", new File("src/main/resources/static/猫.png")); javaMailSender.send(message);
    }
    }

练习和总结

【SpringBoot1.x】SpringBoot1.x 任务的更多相关文章

  1. 记 SpringBoot1.* 转 Springoot2.0 遇到的问题

    1.拦截器问题 到2.0之后在配置文件中写 static-path-pattern: /static/** 已经不起作用(2.0需要在方法中配置) SpringBoot1.*写法 @Configura ...

  2. SpringBoot1.x与监控(六)

    由于2.x和1.x的监控不一样,此处先讲1.x 一 SpringBoot1.x监控 pom.xml <dependency> <groupId>org.springframew ...

  3. SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制

    SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制. 升级前 #文件上传配置 ...

  4. 使用SpringBoot1.4.0的一个坑

    时隔半年,再次使用Spring Boot快速搭建微服务,半年前使用的版本是1.2.5,如今看官网最新的release版本是1.4.0,那就用最新的来构建,由于部署环境可能有多套所以使用maven-fi ...

  5. springboot1.5和jpa利用HikariCP实现多数据源的使用

    背景 现在已有一个完整的项目,需要引入一个新的数据源,其实也就是分一些请求到从库上去 技术栈 springboot1.5 (哎,升不动啊) 思路 两个数据源,其中一个设置为主数据源 两个事物管理器,其 ...

  6. 【SpringBoot1.x】SpringBoot1.x 开发热部署和监控管理

    SpringBoot1.x 开发热部署和监控管理 热部署 在开发中我们修改一个 Java 文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署). ...

  7. 【SpringBoot1.x】SpringBoot1.x 分布式

    SpringBoot1.x 分布式 分布式应用 Zookeeper&Dubbo ZooKeeper 是用于分布式应用程序的高性能协调服务.它在一个简单的界面中公开了常见的服务,例如命名,配置管 ...

  8. 【SpringBoot1.x】SpringBoot1.x 安全

    SpringBoot1.x 安全 文章源码 环境搭建 SpringSecurity 是针对 Spring 项目的安全框架,也是 SpringBoot 底层安全模块默认的技术选型.他可以实现强大的 we ...

  9. 【SpringBoot1.x】SpringBoot1.x 检索

    SpringBoot1.x 检索 文章源码 概念 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticse ...

随机推荐

  1. ubuntu ImportError: No module named setuptools 一句命令解决方案

    https://blog.csdn.net/Super_jm_/article/details/81947563 使用pip安装文件时候提示  ImportError: No module named ...

  2. Java中构造代码块的使用

    例子1 public class Client { { System.out.println("执行构造代码块1"); } { System.out.println("执 ...

  3. Spark性能调优篇二之重构RDD架构及RDD持久化

    如果一个RDD在两个地方用到,就持久化他.不然第二次用到他时,会再次计算. 直接调用cache()或者presist()方法对指定的RDD进行缓存(持久化)操作,同时在方法中指定缓存的策略. 原文:h ...

  4. Python高级语法-私有属性-名字重整(4.7.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 使用__dict__魔法方法 可以看到所有的属性,包括公有的,私有的,保护的等等 不能调用的原因就是,解释器把名字属性给重组了 其实是可以访问到的 2 ...

  5. APEX-数据导出/打印

    前言: 由于公司使用了Oracle APEX构建应用,且在APEX新版本v20.2版本中增强了相关报表导出数据相关功能:正好现在做的事情也需要类似的功能,就先来学习一下Oracle的APEX相关功能及 ...

  6. openstack高可用集群16-ceph介绍和部署

    Ceph Ceph是一个可靠.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备和文件系统服务.块设备存储是Ceph的强项. Ceph的主要优点是分布式 ...

  7. 我们是如何实现DevOps的

    一.DevOps的理解 DevOps的概念理解 DevOps 的概念在软件开发行业中逐渐流行起来.越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能.有了 DevOps ,团队可以定期 ...

  8. C# List的并集、交集、差集

    并集---Union 集合的并集是合并两个集合的所有项,去重,如下图所示:   List<int> ls1 = new List<int>() { 1,2,3,5,7,9 }; ...

  9. .Net Core 审计日志实现

    前言: 近日在项目协同开发过程中出现了问题,数据出现了异常:其他人员怀疑项目数据丢失程序存在问题.于是通过排查程序提供的审计日志最终还原了当时操作及原因. 可见审计日志在排查.定位问题是相当有用的,那 ...

  10. bean中属性名和json不一致解决方案(请求和响应)

    此时@RequestBody.@ResponseBody需要与@JsonProperty结合使用,才能做到请求正常解析,响应按要求格式返回. 注意@JsonProperty注解的位置需要加在gette ...