37.发送电子邮件
Spring框架提供了使用 JavaMailSender 界面发送电子邮件的简单抽象,Spring Boot为其提供了自动配置以及启动器模块。
有关如何使用 JavaMailSender 的详细说明,请参阅参考文档。
如果 spring.mail.host 和相关库(由 spring-boot-starter-mail 定义)可用,则创建默认值 JavaMailSender (如果不存在)。可以通
过 spring.mail 命名空间中的配置项进一步自定义发件人。有关 MailProperties 详细信息,请参阅
特别是,某些默认超时值是无限的,您可能希望更改它以避免线程被无响应的邮件服务器阻塞,如以下示例所示:
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
也可以使用JNDI中的现有 Session 配置 JavaMailSender :
spring.mail.jndi-name=mail/Session
设置 jndi-name 时,它优先于所有其他与会话相关的设置。
38.使用JTA的分布式事务
Spring Boot通过使用Atomikos或Bitronix 嵌入式事务管理器支持跨多个XA资源的分布式JTA事务。部署到合适的Java EE Application Server
时,也支持JTA事务。
检测到JTA环境时,Spring的 JtaTransactionManager 用于管理事务。自动配置的JMS,DataSource和JPA beans已升级为支持XA事务。您
可以使用标准Spring惯用语(例如 @Transactional )来参与分布式事务。如果您在JTA环境中并且仍想使用本地事务,则可以
将 spring.jta.enabled 属性设置为 false 以禁用JTA自动配置。
38.1使用Atomikos事务管理器
Atomikos是一个流行的开源事务管理器,可以嵌入到您的Spring Boot应用程序中。您可以使用 spring-boot-starter-jta-atomikos
Starter引入相应的Atomikos库。Spring Boot自动配置Atomikos并确保将适当的 depends-on 设置应用于Spring beans以正确启动和关闭顺
序。
默认情况下,Atomikos事务日志将写入应用程序主目录(应用程序jar文件所在的目录)中的 transaction-logs 目录。您可以通过
在 application.properties 文件中设置 spring.jta.log-dir 属性来自定义此目录的位置。以 spring.jta.atomikos.properties 开头的
属性也可用于自定义Atomikos UserTransactionServiceImp 。有关 完整的详细信息,请参阅 AtomikosProperties Javadoc。
为确保多个事务管理器可以安全地协调相同的资源管理器,必须为每个Atomikos实例配置唯一ID。默认情况下,此ID是运行
Atomikos的计算机的IP地址。要确保生产中的唯一性,应为应用程序的每个实例配置具有不同值
的 spring.jta.transaction-manager-id 属性。
38.2使用Bitronix事务管理器
Bitronix是一种流行的开源JTA事务管理器实现。您可以使用 spring-boot-starter-jta-bitronix 启动程序将适当的Bitronix依赖项添加到项
目中。与Atomikos一样,Spring Boot自动配置Bitronix并对beans进行后处理,以确保启动和关闭顺序正确。
默认情况下,Bitronix事务日志文件( part1.btm 和 part2.btm )将写入应用程序主目录中的 transaction-logs 目录。您可以通过设
置 spring.jta.log-dir 属性来自定义此目录的位置。以 spring.jta.bitronix.properties 开头的属性也绑定
到 bitronix.tm.Configuration bean,允许完全自定义。有关详细信息,请参阅 Bitronix文档。
为确保多个事务管理器可以安全地协调相同的资源管理器,必须为每个Bitronix实例配置唯一的ID。默认情况下,此ID是运行
Bitronix的计算机的IP地址。为了确保生产的唯一性,您应该为应用程序的每个实例配置不同值
的 spring.jta.transaction-manager-id 属性。