当前位置: 首页 > news >正文

Spring开发系列教程(28)——集成第三方组件

Spring框架不仅提供了标准的IoC容器、AOP支持、数据库访问以及WebMVC等标准功能,还可以非常方便地集成许多常用的第三方组件:

  • 可以集成JavaMail发送邮件;
  • 可以集成JMS消息服务;
  • 可以集成Quartz实现定时任务;
  • 可以集成Redis等服务。

本章我们介绍如何在Spring中简单快捷地集成这些第三方组件。

因为在服务器端,主要以发送邮件为主,例如在注册成功、登录时、购物付款后通知用户,基本上不会遇到接收用户邮件的情况,所以本节我们只讨论如何在Spring中发送邮件。

在Spring中,发送邮件最终也是需要JavaMail,Spring只对JavaMail做了一点简单的封装,目的是简化代码。为了在Spring中集成JavaMail,我们在pom.xml中添加以下依赖:

  • org.springframework:spring-context-support:6.0.0
  • jakarta.mail:jakarta.mail-api:2.0.1
  • com.sun.mail:jakarta.mail:2.0.1

以及其他Web相关依赖。

我们希望用户在注册成功后能收到注册邮件,为此,我们先定义一个JavaMailSender的Bean:

@Bean JavaMailSender createJavaMailSender( // smtp.properties: @Value("${smtp.host}") String host, @Value("${smtp.port}") int port, @Value("${smtp.auth}") String auth, @Value("${smtp.username}") String username, @Value("${smtp.password}") String password, @Value("${smtp.debug:true}") String debug) { var mailSender = new JavaMailSenderImpl(); mailSender.setHost(host); mailSender.setPort(port); mailSender.setUsername(username); mailSender.setPassword(password); Properties props = mailSender.getJavaMailProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", auth); if (port == 587) { props.put("mail.smtp.starttls.enable", "true"); } if (port == 465) { props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); } props.put("mail.debug", debug); return mailSender; }

这个JavaMailSender接口的实现类是JavaMailSenderImpl,初始化时,传入的参数与JavaMail是完全一致的。

另外注意到需要注入的属性是从smtp.properties中读取的,因此,AppConfig导入的就不止一个.properties文件,可以导入多个:

@Configuration @ComponentScan @EnableWebMvc @EnableTransactionManagement @PropertySource({ "classpath:/jdbc.properties", "classpath:/smtp.properties" }) public class AppConfig { ... }

下一步是封装一个MailService,并定义sendRegistrationMail()方法:

@Component public class MailService { @Value("${smtp.from}") String from; @Autowired JavaMailSender mailSender; public void sendRegistrationMail(User user) { try { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "utf-8"); helper.setFrom(from); helper.setTo(user.getEmail()); helper.setSubject("Welcome to Java course!"); String html = String.format("<p>Hi, %s,</p><p>Welcome to Java course!</p><p>Sent at %s</p>", user.getName(), LocalDateTime.now()); helper.setText(html, true); mailSender.send(mimeMessage); } catch (MessagingException e) { throw new RuntimeException(e); } } }

观察上述代码,MimeMessage是JavaMail的邮件对象,而MimeMessageHelper是Spring提供的用于简化设置MimeMessage的类,比如我们设置HTML邮件就可以直接调用setText(String text, boolean html)方法,而不必再调用比较繁琐的JavaMail接口方法。

最后一步是调用JavaMailSender.send()方法把邮件发送出去。

在MVC的某个Controller方法中,当用户注册成功后,我们就启动一个新线程来异步发送邮件:

User user = userService.register(email, password, name); logger.info("user registered: {}", user.getEmail()); // send registration mail: new Thread(() -> { mailService.sendRegistrationMail(user); }).start();

因为发送邮件是一种耗时的任务,从几秒到几分钟不等,因此,异步发送是保证页面能快速显示的必要措施。这里我们直接启动了一个新的线程,但实际上还有更优化的方法,我们在下一节讨论。

http://www.jsqmd.com/news/440229/

相关文章:

  • 启用Spring Initializr 快速创建Maven管理的springBoot方案
  • Spring Boot 3.2+ GraalVM原生镜像构建实战(JDK21+GraalVM 23.2实测)
  • leetcode76. 最小覆盖子串(传引用 unordered_map的慢 可以用数组来代替哈希表)
  • 网易智企肖钰妍:未来三年,服务营销领域 Agent 五大趋势预测
  • 2026省选邮寄
  • 软件开发创新日志 #1项目分析+二次开发
  • BurpSuite安装教程
  • 2026年比较好的疲劳试验机厂家推荐:电动伺服疲劳试验机/橡胶弹性体疲劳试验机/山东橡胶弹性体疲劳试验机专业制造厂家推荐 - 品牌宣传支持者
  • 函数栈帧的创建与销毁
  • 2026年靠谱的阻燃硅橡胶品牌推荐:胶辊硅橡胶/抗静电硅橡胶/自润滑硅橡胶口碑好的厂家推荐 - 品牌宣传支持者
  • AI 基础概念
  • 通过计算重用提取内在潜在内存FlashMem: Distilling Intrinsic Latent Memory via Computation Reuse
  • 2026年评价高的风力选煤设备厂家推荐:智能干选选煤设备/煤炭提质选煤设备厂家推荐哪家好 - 品牌宣传支持者
  • 晶圆寻边器厂家哪家靠谱?能适配8-12寸晶圆且精度达±0.1mm吗?
  • Git 中 提交(commit)和 合并(merge)的区别
  • 零基础中医执医技能操作怎么练?深度测评阿虎医考 - 医考机构品牌测评专家
  • 简单说明,轻松搞懂 ,AI混剪,AI智能成片有什么区别
  • 该套程序是正压检漏机程序,总共有9个 A6总线伺服电机,6个总线步进电机,采用EtherCAT...
  • 2026年靠谱的聚脲水箱工厂推荐:喷涂聚脲体育看台/天冬聚脲屋顶防水专业制造厂家推荐 - 品牌宣传支持者
  • Flutter 三方库 firebase_dart 的鸿蒙化适配指南 - 纯 Dart 实现的 Firebase 客户端、告别原生 SDK 依赖、鸿蒙级实时数据库与鉴权实战
  • 2026年评价高的定速式摩擦磨损试验机厂家推荐:山东直线往复摩擦磨损试验机实力工厂推荐 - 品牌宣传支持者
  • 2026年口碑好的环保选煤设备工厂推荐:煤炭提质选煤设备/新型多级风力选煤设备值得信赖的生产厂家 - 品牌宣传支持者
  • 2026年靠谱的称重包装机厂家推荐:注塑件称重包装机/全自动称重包装机/精密部件称重包装机实力品牌厂家推荐 - 品牌宣传支持者
  • 深入解析:C语言——动态内存管理
  • 零基础备考医考,培训机构到底怎么选? - 医考机构品牌测评专家
  • 状压-dp
  • 【2026实测】OBS Studio直播软件完全指南:零基础打造高清直播间(附安装包) - xiema
  • 矩阵相关
  • 临床执业医师培训机构哪个好?特别实用指南来了 - 医考机构品牌测评专家
  • 2026年比较好的GEO品牌推荐:GEO招商/GEO公司/GEO系统可靠推荐企业 - 品牌宣传支持者