SpringBoot【开发实用篇】---- 整合第三方技术(任务、邮件)

news2025/1/15 13:01:26

SpringBoot【开发实用篇】---- 整合第三方技术(任务、邮件)

  • 1. 任务
    • Quartz
    • Task
  • 2. 邮件
    • 发送简单邮件
    • 发送多组件邮件(附件、复杂正文)

1. 任务

springboot整合第三方技术第二部分我们来说说任务系统,其实这里说的任务系统指的是定时任务。定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统性能监控报告,还有抢购类活动的商品上架,这些都离不开定时任务。本节将介绍两种不同的定时任务技术。

Quartz

Quartz技术是一个比较成熟的定时任务框架,怎么说呢?有点繁琐,用过的都知道,配置略微复杂。springboot对其进行整合后,简化了一系列的配置,将很多配置采用默认设置,这样开发阶段就简化了很多。再学习springboot整合Quartz前先普及几个Quartz的概念。

  • 工作(Job):用于定义具体执行的工作
  • 工作明细(JobDetail):用于描述定时工作相关的信息
  • 触发器(Trigger):描述了工作明细与调度器的对应关系
  • 调度器(Scheduler):用于描述触发工作的执行规则,通常使用cron表达式定义规则

简单说就是你定时干什么事情,这就是工作,工作不可能就是一个简单的方法,还要设置一些明细信息。工作啥时候执行,设置一个调度器,可以简单理解成设置一个工作执行的时间。工作和调度都是独立定义的,它们两个怎么配合到一起呢?用触发器。完了,就这么多。下面开始springboot整合Quartz。

步骤①:导入springboot整合Quartz的starter

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

步骤②:定义任务Bean,按照Quartz的开发规范制作,继承QuartzJobBean

public class MyQuartz extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz task run...");
    }
}

步骤③:创建Quartz配置类,定义工作明细(JobDetail)与触发器的(Trigger)bean

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail printJobDetail(){
        //绑定具体的工作
        return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    }
    @Bean
    public Trigger printJobTrigger(){
        ScheduleBuilder schedBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
        //绑定对应的工作明细
        return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(schedBuilder).build();
    }
}

工作明细中要设置对应的具体工作,使用newJob()操作传入对应的工作任务类型即可。

触发器需要绑定任务,使用forJob()操作传入绑定的工作明细对象。此处可以为工作明细设置名称然后使用名称绑定,也可以直接调用对应方法绑定。触发器中最核心的规则是执行时间,此处使用调度器定义执行时间,执行时间描述方式使用的是cron表达式。有关cron表达式的规则,各位小伙伴可以去参看相关课程学习,略微复杂,而且格式不能乱设置,不是写个格式就能用的,写不好就会出现冲突问题。

Task

spring根据定时任务的特征,将定时任务的开发简化到了极致。怎么说呢?要做定时任务总要告诉容器有这功能吧,然后定时执行什么任务直接告诉对应的bean什么时间执行就行了,就这么简单,一起来看怎么做

步骤①:开启定时任务功能,在引导类上开启定时任务功能的开关,使用注解@EnableScheduling

@SpringBootApplication
//开启定时任务功能
@EnableScheduling
public class Springboot22TaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot22TaskApplication.class, args);
    }
}

步骤②:定义Bean,在对应要定时执行的操作上方,使用注解@Scheduled定义执行的时间,执行时间的描述方式还是cron表达式

@Component
public class MyBean {
    @Scheduled(cron = "0/1 * * * * ?")
    public void print(){
        System.out.println(Thread.currentThread().getName()+" :spring task run...");
    }
}

完事,这就完成了定时任务的配置。总体感觉其实什么东西都没少,只不过没有将所有的信息都抽取成bean,而是直接使用注解绑定定时执行任务的事情而已。

如何想对定时任务进行相关配置,可以通过配置文件进行

spring:
  task:
   	scheduling:
      pool:
       	size: 1							# 任务调度线程池大小 默认 1
      thread-name-prefix: ssm_      	# 调度线程名称前缀 默认 scheduling-      
        shutdown:
          await-termination: false		# 线程池关闭时等待所有任务完成
          await-termination-period: 10s	# 调度线程关闭前最大等待时间,确保最后一定关闭

2. 邮件

springboot整合第三方技术第三部分我们来说说邮件系统,发邮件是java程序的基本操作,springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作,再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化的多码?其实不多,差别不大,只是还个格式而已。

学习邮件发送之前先了解3个概念,这些概念规范了邮件操作过程中的标准。

  • SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
  • POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
  • IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议

简单说就是SMPT是发邮件的标准,POP3是收邮件的标准,IMAP是对POP3的升级。我们制作程序中操作邮件,通常是发邮件,所以SMTP是使用的重点,收邮件大部分都是通过邮件客户端完成,所以开发收邮件的代码极少。除非你要读取邮件内容,然后解析,做邮件功能的统一处理。例如HR的邮箱收到求职者的简历,可以读取后统一处理。但是为什么不制作独立的投递简历的系统呢?所以说,好奇怪的需求,因为要想收邮件就要规范发邮件的人的书写格式,这个未免有点强人所难,并且极易收到外部攻击,你不可能使用白名单来收邮件。如果能使用白名单来收邮件然后解析邮件,还不如开发个系统给白名单中的人专用呢,更安全,总之就是鸡肋了。下面就开始学习springboot如何整合javamail发送邮件。

发送简单邮件

步骤①:导入springboot整合javamail的starter

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

步骤②:配置邮箱的登录信息

spring:
  mail:
    host: smtp.126.com
    username: test@126.com
    password: test

java程序仅用于发送邮件,邮件的功能还是邮件供应商提供的,所以这里是用别人的邮件服务,要配置对应信息。

host配置的是提供邮件服务的主机协议,当前程序仅用于发送邮件,因此配置的是smtp的协议。

password并不是邮箱账号的登录密码,是邮件供应商提供的一个加密后的密码,也是为了保障系统安全性。不然外部人员通过地址访问下载了配置文件,直接获取到了邮件密码就会有极大的安全隐患。有关该密码的获取每个邮件供应商提供的方式都不一样,此处略过。可以到邮件供应商的设置页面找POP3或IMAP这些关键词找到对应的获取位置。下例仅供参考:
在这里插入图片描述
步骤③:使用JavaMailSender接口发送邮件

@Service
public class SendMailServiceImpl implements SendMailService {
    @Autowired
    private JavaMailSender javaMailSender;

    //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test@126.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "测试邮件正文内容";

    @Override
    public void sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from+"(小甜甜)");
        message.setTo(to);
        message.setSubject(subject);
        message.setText(context);
        javaMailSender.send(message);
    }
}

将发送邮件的必要信息(发件人、收件人、标题、正文)封装到SimpleMailMessage对象中,可以根据规则设置发送人昵称等。

发送多组件邮件(附件、复杂正文)

发送简单邮件仅需要提供对应的4个基本信息就可以了,如果想发送复杂的邮件,需要更换邮件对象。使用MimeMessage可以发送特殊的邮件。

发送网页正文邮件

@Service
public class SendMailServiceImpl2 implements SendMailService {
    @Autowired
    private JavaMailSender javaMailSender;

    //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test@126.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "<img src='ABC.JPG'/><a href='https://www.itcast.cn'>点开有惊喜</a>";

    public void sendMail() {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setFrom(to+"(小甜甜)");
            helper.setTo(from);
            helper.setSubject(subject);
            helper.setText(context,true);		//此处设置正文支持html解析

            javaMailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

发送带有附件的邮件

@Service
public class SendMailServiceImpl2 implements SendMailService {
    @Autowired
    private JavaMailSender javaMailSender;

    //发送人
    private String from = "test@qq.com";
    //接收人
    private String to = "test@126.com";
    //标题
    private String subject = "测试邮件";
    //正文
    private String context = "测试邮件正文";

    public void sendMail() {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);		//此处设置支持附件
            helper.setFrom(to+"(小甜甜)");
            helper.setTo(from);
            helper.setSubject(subject);
            helper.setText(context);

            //添加附件
            File f1 = new File("springboot_23_mail-0.0.1-SNAPSHOT.jar");
            File f2 = new File("resources\\logo.png");

            helper.addAttachment(f1.getName(),f1);
            helper.addAttachment("最靠谱的培训结构.png",f2);

            javaMailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql中的binlog

目录标题 前言binlog有两个常用的使用场景 常用的binlog日志操作命令查看所有binlog日志列表 【show master logs;】查看master状态&#xff0c;即最后&#xff08;最新&#xff09;一个binlog日志的编号名称&#xff0c;及其最后一个操作事件pos结束点(Position)值。【show ma…

Net跨平台UI框架Avalonia入门-安装和使用

Avalonia UI是是Net的跨平台UI框架&#xff0c;支持 Windows、Linux、iOS 和 Android&#xff0c;与Net其他UI框架相比&#xff0c;主要是支持Linux。在国产化的需求下&#xff0c;对于C#开发的程序员&#xff0c;Avalonia适合用来开发Linux的桌面客户端。 Avalonia 安装 安装…

SpringBoot——日志

简单介绍&#xff1a; 在我们的程序开发中&#xff0c;日志的存在是必不可少的&#xff0c;日志可以帮助我们观察程序的运行过程&#xff0c;报错信息&#xff0c;各种警告&#xff0c;在我们调试程序的时候起到了非常大的作用。那么在SpringBoot中&#xff0c;我们在每次启动…

6.4.1最小生成树(Prim和kruskal算法)

生成树的概念&#xff1a; 连通图的生成树是包含图中全部顶点的一个极小连通子图 &#xff08;边尽可能的少&#xff0c;但要保持连通&#xff09; 若图中顶点数为n&#xff0c;则它的生成树中含有n-1条边。对于生成树而言&#xff0c;若看去他的一条边&#xff0c;则会变成…

软件测试太卷了,三个练手的软件测试实战项目偷偷提升自己(附全套视频跟源码)

项目一&#xff1a;12306抢票项目 项目测试目的 学会Selenium定位web元素的方法 熟练浏览器调试工具使用 项目主体步骤 1&#xff09; 人工走一遍流程&#xff0c;对自动化的流程心中有数 2&#xff09; 按步骤拆分&#xff0c;然后对每一个小步骤编写自动化脚本 3&#xf…

1.8G专网5G工业路由器助力智能电网-电力物联网方案

随着智能电网的普及与使用&#xff0c;电力终端的数量也日益剧增&#xff0c;由于间距较远、位置偏僻的特性&#xff0c;造成监管难、效率低、成本高等管理维护难题。 5G的价值也体现了由实验室走向垂直行业应用&#xff0c;赋予各行各业高效组网、高速用网的应用体验。智联物联…

PowerBi连接MySQL提示需安装组件才能使用,本人删去已经下载好的组件,再做一份详细教程。

问题 当我们用PowerBi连接Mysql时候&#xff0c;他突然提示我们需要安装组件。 解决 检查自己的MySQL版本 打开cmd运行框,输入命令mysql -uroot -p,再输入数据库密码 输入select version(); 我这里是8.0.16版本&#xff0c;记住自己的版本号 下载 mysql connector https:/…

在 EKS 上部署 HummerRisk

HummerRisk 是开源的云原生安全平台&#xff0c;以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和容器云安全检测。本文讲介绍如何在 EKS 上部署 HummerRisk。 EKS 简介 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;…

python创建用户界面之PyQt5的使用

首先我们winR输入cmd 有两种方法下载PyQt5 方法一&#xff1a; pip install PyQt5 pip install PyQt5-tools 方法二&#xff1a; pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douban.com/simple 下载好了之后我们打开 Pych…

idea热部署插件JRebel激活(强烈推荐,试试就离不开了)

JRebel可以实现在idea中热部署项目&#xff0c;修改后不用重启项目&#xff0c;让开发更丝滑。 JRebel需要激活才可以正常使用。 一、快速使用 1、idea安装JRebel插件。 File>Settings>Plugins 搜索JRebel 2、激活 1&#xff09;填写激活信息 个人部署的注册服务器&…

加密解密软件VMProtect教程(七):主窗口之控制面板“详情”部分

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

低代码与其拓荒,不如颠覆开发行业

目录 一、前言 二、低代码是一个值得信赖的“黑盒子” 粗略总结&#xff0c;开发者对低代码平台所见即所得设计器有两种反应&#xff1a; 三、人人都爱黑盒子 四、用“低代码平台”来开发是什么样的感受&#xff1f; 五、结论 一、前言 在科幻电影中&#xff0c;我们看到…

图片去底色,让您的产品瞬间脱颖而出

在现代社会中&#xff0c;图片是我们不可或缺的一部分&#xff0c;在各行业中都有着非常重要的作用。但是&#xff0c;有时候我们需要将某些图片中的背景去除&#xff0c;以便更好地突出主体&#xff0c;这时候&#xff0c;图片去底色就起到了非常重要的作用。 图片去底色的优…

论文、专利、文献检索及图像数据工具总结

一、文献检索 1、中文文献检索参考 中文文献途径网址用途1知网https://www.cnki.net/文献检索、下载2万方数据网https://www.wanfangdata.com.cn/文献检索、下载3维普期刊http://lib.cqvip.com/文献检索、下载4浙江图书馆https://www.zjlib.cn/#searchs_1_div文献检索、下载5…

一站式数据分析学习,让你成为一名合格的数据分析师

一站式数据分析学习&#xff0c;让你成为一名合格的数据分析师 随着数字化时代的到来&#xff0c;数字经济已然成为了新的发展潮流&#xff0c;数据的重要性越发显著。加上大数据、人工智能、云计算等数字技术的发展&#xff0c;让数字化时代的步伐迈得更快&#xff0c;目前已经…

为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 随着无线传感器网络(Wireless Sensor Network,WSN)的广泛应用,业界开始应用环境能量收集技术解决传感器节点的能量补充问题。而…

template和component自定义组件之间的区别

在小程序中自定义组件 component 方式和组件模板 template 2种方式实现页面组件化。 一、component自定义组件 1.概念 自定义组件是指可以被多个页面使用的组件&#xff0c;可以在小程序中多次复用。在开发中可以将一个页面中的代码和样式抽象出来&#xff0c;然后创建一个自定…

百汇BCR:如何参与外汇交易?哪个交易时间更好?

外汇市场时连续24小时运转的&#xff0c;也就是说随时都可以参与交易。那不同的交易时间进场是否会影响交易结果&#xff1f;哪个时间参与交易更好&#xff1f; 一、国际主要市场外汇交易时间&#xff08;北京时间&#xff09; 新西兰惠灵顿外汇市场&#xff1a;04&#xff1a…

基于微信小程序的新冠疫苗预约系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;微信小程序 && Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项…

ABAP OOALV模板(Custom Control)

该方法OOALV需要将ALV置入屏幕上的自定义控件中 alv较少时具有代码可读性可维护性高的特点&#xff0c;实现起来较为简单&#xff0c;但由于custom control固定了位置所以无法动态拖拽边框 创建报表程序后通过se80对象浏览器新建屏幕9001 点击布局进入屏幕制作器界面 将custom…