首页 > 其他分享 >SpringBoot 1x 系列之(十一)Spring Boot与任务

SpringBoot 1x 系列之(十一)Spring Boot与任务

时间:2024-02-28 10:16:21浏览次数:27  
标签:SpringBoot 1x Boot class 邮箱 com public 邮件 163

Spring Boot与任务

异步任务、定时任务、邮件任务

1. 异步任务

1.1 应用场景

执行一些操作(如:邮件任务等)不想阻塞当前线程的情况下,可以通过多线程的方式进行异步处理。

1.2 快速使用

主配置类

//开启@Async异步注解功能
@EnableAsync
@EnableRabbit
@EnableCaching
@MapperScan("com.atguigu.springboot.mapper")
@SpringBootApplication
public class SpringBootCacheApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootCacheApplication.class, args);
    }
}

Service中的测试方法

@Service
public class DepartmentService {

  	//告诉Spring这是一个异步方法
    @Async
    public void helloWorld(){

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("执行中。。。。。。。。。");
    }
}

Controller中的调用方法

@RestController
public class DepartmentController {

    @GetMapping("/test")
    public String testAsync(){
        departmentService.helloWorld();
        return "success";
    }
}

2. 定时任务

2.1 快速使用

主配置类

//开启@Scheduled定时任务注解功能
@EnableScheduling
@EnableAsync
@EnableRabbit
@EnableCaching
@MapperScan("com.atguigu.springboot.mapper")
@SpringBootApplication
public class SpringBootCacheApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootCacheApplication.class, args);
    }
}

Service中的测试方法

@Service
public class DepartmentService {

  	//指定cron表达式,每个月的周一到周六的每一天的每时每分的1-4秒每一秒都执行一次
    @Scheduled(cron = "1-4 * * * * MON-SAT")
    public void testSchedule(){
        System.out.println("定时任务执行了");
    }
}

2.2 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个星期四

3. 邮件任务

邮件发送的流程:

​ 1)现在lisi要给zhangsan发送邮件,首先lisi要用自己的账号密码登录邮箱服务器;

​ 2)163邮箱服务器把lisi写的邮件发给QQ邮箱服务器;

​ 3)lisi上线后,再从QQ邮箱服务器中获取自己的邮件。

3.1 引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

3.2 自动配置

自动配置类:MailSenderAutoConfiguration

向容器中放了JavaMailSenderImpl,用于发送邮件

3.3 全局配置

以163邮箱向QQ邮箱发邮件为例,需要配置163邮箱信息

spring:
  mail:
    host: smtp.163.com
    username: [email protected]
    # 授权码:用于第三方登录,防止真正的密码泄露
    password: XXXXXXXXXXXXX
    # 如果是QQ邮箱向其他邮箱发邮件,需要增加如下配置
    properties:
      mail:
        smtp:
          ssl:
            enable: true

网易163邮箱SMTP服务器获取:

网易163邮箱授权码获取:

通过SpringBoot发邮件是需要开启服务的,同时开启服务时会拿到授权码

3.4 快速使用

3.4.1 简单邮件

163邮箱向QQ邮箱发送一封简单邮件

    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    public void testSimpleMail(){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();

//        设置标题
        simpleMailMessage.setSubject("Hello World!");
//        设置内容
        simpleMailMessage.setText("Spring Boot Mail");
//        设置收件人
        simpleMailMessage.setTo("[email protected]");
//        设置发件人
        simpleMailMessage.setFrom("[email protected]");
//        调用JavaMailSenderImpl的API发送邮件
        mailSender.send(simpleMailMessage);
    }

QQ邮箱收到的信息如下:

3.4.2 复杂邮件

复杂邮件:带附件或邮件内容是Html

    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    public void testComplateMail() throws MessagingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
//        MimeMessageHelper:复杂的消息邮件,第二个参数的含义是是否要上传文件
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

//        设置标题
        helper.setSubject("Hello World!");
//        设置内容为Html,当内容为Html时,需要传第二个参数为true,默认是false,false不会解析html
        helper.setText("<b style='color:red'>Spring Boot Mail</b>", true);
//        设置收件人
        helper.setTo("[email protected]");
//        设置发件人
        helper.setFrom("[email protected]");
//        设置要携带的附件,如果有多个,设置多个就可以
        helper.addAttachment("1.txt", new File("C:\\Users\\商务小本本\\Desktop\\新建文本文档.txt"));
//        最终发送的邮件是MimeMessage而不是MimeMessageHelper
        mailSender.send(mimeMessage);
    }

标签:SpringBoot,1x,Boot,class,邮箱,com,public,邮件,163
From: https://www.cnblogs.com/wzzzj/p/18039120

相关文章

  • SpringBoot 1x 系列之(十)Spring Boot与检索
    SpringBoot与检索ElasticSearch1.ElasticSearch简介1)Java语言编写的开源全文搜索引擎。2)用于快速的存储、搜索和分析海量数据。3)是一个分布式搜索服务。4)提供RestfulAPI,通过发送请求的方式就可以将ElasticSearch用起来。5)底层基于Lucene(开源的搜索引擎软件工具包)2.Doc......
  • SpringBoot 1x 系列之(九)Spring Boot与消息
    SpringBoot与消息JMS、AMQP、RabbitMQ1.概述消息服务的两个常见规范(消息代理规范):JMS、AMQPJMS(JavaMessageService)JAVA消息服务:​ 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现AMQP(AdvancedMessageQueuingProtocol)高级消息队列协议​ 也是一个消息代理的规范......
  • SpringBoot 1x 系列之(八)Spring Boot与缓存
    SpringBoot与缓存JSR-107、Spring缓存抽象、整合Redis缓存:加速系统访问,提升系统性能热点数据、临时数据(如验证码)1.JSR-1071.1背景统一缓存的开发规范及提升系统的扩展性,J2EE发布了JSR-107缓存规范1.2JSR107简介CacheManager与Cache的关系,类比连接池与连接涉及的包ja......
  • SpringBoot 1x 系列之(七)自定义starter
    自定义starterstarters原理、自定义starters如何自定义starter:​ 1、这个场景需要使用到的依赖是什么?​ 2、如何编写自动配置@Configuration//指定这个类是一个配置类@ConditionalOnXXX//在指定条件成立的情况下自动配置类生效@AutoConfigureAfter//指定自动配置类的......
  • SpringBoot 1x 系列之(六)Spring Boot启动配置原理
    SpringBoot启动配置原理启动原理、运行流程、自动配置原理几个重要的事件回调机制(这几个事件回调机制可供我们进行干预)配置在META-INF/spring.factoriesApplicationContextInitializerSpringApplicationRunListener只需要放在ioc容器中(@Component标注)ApplicationRunnerCo......
  • SpringBoot 1x 系列之(五)SpringBoot与数据访问
    SpringBoot与数据访问JDBC、MyBatis、SpringDataJPASpringBoot底层是使用的SpringData作为数据访问的默认处理方式。1.整合基本JDBC与数据源Pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><......
  • SpringBoot 1x 系列之(四)Spring Boot与Web开发
    SpringBoot与Web开发Thymeleaf、Web定制、容器定制1.如何使用SpringBoot创建SpringBoot应用,选中我们需要的模块SpringBoot已经默认将这些场景配置好了,我们只需要在配置文件中指定少量配置就可以运行起来编写业务代码2.SpringBoot对静态资源的映射规则普通的web应用......
  • SpringBoot 1x 系列之(三)SpringBoot与日志
    SpringBoot与日志日志框架、日志配置1.日志框架JDBC和数据库驱动:JDBC是统一的接口层(抽象层),面向JDBC进行开发,而不直接面向数据库驱动,这样的好处是数据库驱动会不断的出现新产品,如果直接面向数据库驱动开发,那么,每次更换数据库驱动,开发的代码就要做相应的调整,而面向JDBC开发,不管......
  • SpringBoot 1x 系列之(二)SpringBoot 配置
    SpringBoot配置配置文件、加载顺序、配置原理1.配置文件SpringBoot默认使用两种类型的配置文件作为一个全局配置文件,配置文件名固定,用于修改SpringBoot自动配置的默认值application.propertiesapplication.y(a)ml1.1YAML简介YAML(YAMLAin'tMarkupLanguage)递归缩写......
  • SpringBoot 1x 系列之(一)SpringBoot 入门
    SpringBoot入门SpringBoot和微服务概念的简介、SpringBootHelloWorld入门程序、内部原理1.SpringBoot简介简化Spring应用开发(整个J2EE开发)的一个框架整个Spring技术栈的一个大整合.........J2EE开发的一站式解决方案注:SpringBoot使用嵌入式的Servlet容器,应用无......