- 1 Spring Boot文档
- 1.1 关于这篇文档
- 1.2 获取帮助
- 1.3 第一步
- 1.4 使用Spring Boot
- 1.5 了解Spring Boot功能
- 1.6 转向生产
- 1.7 深入问题
- 2 入门
- 2.1 Spring Boot介绍
- 2.2 系统要求
- 2.3 安装Spring Boot
- 2.4 开发您的第一个Spring Boot应用程序
- 2.5 接下来要阅读的内容
- 3 使用Spring Boot
- 3.1 构建系统
- 3.1.1 依赖管理
- 3.2 结构化您的代码
- 3.3 配置类
- 3.4 自动配置
- 3.5 Spring Beans和依赖注入
- 3.6 使用@SpringBootApplication注解
- 3.7 运行您的应用程序
- 3.8 开发者工具
- 3.9 打包用于生产中的应用
- 3.10 接下来要阅读的内容
- 4 Spring Boot功能
- 4.1 SpringApplication
- 4.2 外部配置
- 4.3 Profiles
- 4.4 日志
- 4.5 国际化
- 4.6 JSON
- 4.7 开发Web应用程序
- 4.8 安全
- 4.9 使用SQL数据库
- 4.10 使用NoSQL技术
- 4.11 缓存
- 4.12 消息
- 4.13 使用RestTemplate调用REST服务
- 4.14 使用WebClient调用REST服务
- 4.15 校验
- 4.16 发送邮件
- 4.17 使用JTA的分布式事务
- 4.18 Hazelcast
- 4.19 Quartz Scheduler
- 4.20 任务执行和调度
- 4.21 Spring Integration
- 4.22 Spring Session
- 4.23 JMX的监控和管理
- 4.23 测试
- 4.25 WebSockets
- 4.26 Web Service
- 4.27 创建自己的自动配置
- 4.28 Kotlin支持
- 4.29 接下来要阅读的内容
- 5 Spring Boot Actuator: 生产就绪功能
- 5.1 启用生产就绪功能
- 5.2 Endpoints
- 5.3 通过HTTP进行监控和管理
- 5.4 JMX的监控和管理
- 5.5 Loggers
- 5.6 Metrics
- 5.7 审计
- 5.8 HTTP跟踪
- 5.9 进程监控
- 5.10 Cloud Foundry支持
- 5.11 接下来要阅读的内容
- 6 部署Spring Boot应用程序
- 6.1 部署到Cloud
- 6.2 安装Spring Boot应用程序
- 6.3 接下来要阅读的内容
- 7 Spring Boot CLI
- 7.1 安装CLI
- 7.2 使用CLI
- 7.3 使用Groovy Bean DSL开发应用程序
- 7.4 使用settings.xml配置CLI
- 7.5 接下来要阅读的内容
- 8 构建工具插件
- 8.1 Spring Boot Maven插件
- 8.2 Spring Boot Gradle插件
- 8.3 Spring Boot AntLib模块
- 8.4 支持其他构建系统
- 8.5 接下来要阅读的内容
- 9 ‘How-to’ 指南
- 9.1 Spring Boot应用
- 9.2 属性和配置
- 9.3 嵌入式Web服务器
- 9.4 Spring MVC
4.17 使用JTA的分布式事务
Spring Boot通过使用Atomikos或Bitronix嵌入式事务管理器支持跨多个XA资源的分布式JTA事务。 部署到合适的Java EE Application Server时,也支持JTA事务。
检测到JTA环境时,Spring的JtaTransactionManager用于管理事务。 自动配置的JMS,DataSource和JPA bean已升级为支持XA事务。 您可以使用标准的Spring惯用语(例如@Transactional)来参与分布式事务。 如果您在JTA环境中并且仍想使用本地事务,则可以将spring.jta.enabled属性设置为false以禁用JTA自动配置。
4.17.1 使用Atomikos事务管理器
Atomikos是一个流行的开源事务管理器,可以嵌入到Spring Boot应用程序中。 您可以使用spring-boot-starter-jta-atomikos Starter来获取相应的Atomikos库。 Spring Boot自动配置Atomikos并确保将适当的依赖设置应用于Spring bean,以便正确启动和关闭顺序。
默认情况下,Atomikos事务日志将写入应用程序主目录(应用程序jar文件所在的目录)中的transaction-logs目录。 您可以通过在application.properties文件中设置spring.jta.log-dir属性来自定义此目录的位置。 以spring.jta.atomikos.properties开头的属性也可用于自定义Atomikos UserTransactionServiceImp。 有关完整的详细信息,请参阅AtomikosProperties Javadoc。
为确保多个事务管理器可以安全地协调相同的资源管理器,必须使用唯一ID配置每个Atomikos实例。 默认情况下,此ID是运行Atomikos的计算机的IP地址。 要确保生产中的唯一性,您应该为应用程序的每个实例配置spring.jta.transaction-manager-id属性,并使用不同的值.
4.17.2 使用Bitronix事务管理器
Bitronix是一种流行的开源JTA事务管理器实现。 您可以使用spring-boot-starter-jta-bitronix starter为您的项目添加适当的Bitronix依赖项。 与Atomikos一样,Spring Boot会自动配置Bitronix并对bean进行后处理,以确保启动和关闭顺序正确。
默认情况下,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属性,并使用不同的值。
4.17.3 使用Java EE托管事务管理器
如果将Spring Boot应用程序打包为war或ear文件并将其部署到Java EE应用程序服务器,则可以使用应用程序服务器的内置事务管理器。 Spring Boot尝试通过查看常见的JNDI位置(java:comp/UserTransaction,java:comp/TransactionManager等)来自动配置事务管理器。 如果使用应用程序服务器提供的事务服务,通常还需要确保所有资源都由服务器管理并通过JNDI公开。 Spring Boot尝试通过在JNDI路径(java:/JmsXA或java:/XAConnectionFactory)中查找ConnectionFactory来自动配置JMS,并且可以使用spring.datasource.jndi-name属性来配置DataSource。
4.17.4 混合XA和非XA JMS连接
使用JTA时,主JMS ConnectionFactory bean可识别XA并参与分布式事务。 在某些情况下,您可能希望使用非XA ConnectionFactory处理某些JMS消息。 例如,您的JMS处理逻辑可能需要比XA超时更长的时间。
如果要使用非XA ConnectionFactory,可以注入nonXaJmsConnectionFactory bean而不是@Primary jmsConnectionFactory bean。 为了保持一致性,还使用bean别名xaJmsConnectionFactory提供了jmsConnectionFactory bean。
以下示例显示如何注入ConnectionFactory实例:
// Inject the primary (XA aware) ConnectionFactory
@Autowired
private ConnectionFactory defaultConnectionFactory;
// Inject the XA aware ConnectionFactory (uses the alias and injects the same as above)
@Autowired
@Qualifier("xaJmsConnectionFactory")
private ConnectionFactory xaConnectionFactory;
// Inject the non-XA aware ConnectionFactory
@Autowired
@Qualifier("nonXaJmsConnectionFactory")
private ConnectionFactory nonXaConnectionFactory;
4.17.5 支持替代嵌入式事务管理器
XAConnectionFactoryWrapper和XADataSourceWrapper接口可用于支持备用嵌入式事务管理器。 接口负责包装XAConnectionFactory和XADataSource bean,并将它们公开为常规ConnectionFactory和DataSource bean,它们透明地注册分布式事务。 DataSource和JMS自动配置使用JTA变体,前提是您有一个JtaTransactionManager bean和在ApplicationContext中注册的相应XA包装bean。
BitronixXAConnectionFactoryWrapper和BitronixXADataSourceWrapper提供了如何编写XA包装器的很好示例。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论