38.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 。spring.datasource.jndi-name 属性 配置{1801 } /}。
38.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;
38.5支持替代嵌入式事务管理器
该 XAConnectionFactoryWrapper 和 XADataSourceWrapper 接口可用于支持替代嵌入式事务经理。接口负责包装 XAConnectionFactory
和 XADataSource beans并将它们公开为常规 ConnectionFactory 和 DataSource beans,它们透明地注册分布式事务。如果您
在 ApplicationContext 中注册了 JtaTransactionManager bean和相应的XA包装beans,则DataSource和JMS自动配置将使用JTA变体。
该BitronixXAConnectionFactoryWrapper 和BitronixXADataSourceWrapper 提供了如何编写XA包装很好的例子。
39. Hazelcast
如果Hazelcast在类路径上并找到合适的配置,Spring Boot会自动配置您可以在应用程序中注入的 HazelcastInstance 。
如果你定义 com.hazelcast.config.Config bean,Spring Boot使用它。如果您的配置定义了实例名称,Spring Boot会尝试查找现有实例而
不是创建新实例。
您还可以指定要通过配置使用的 hazelcast.xml 配置文件,如以下示例所示:
spring.hazelcast.config=classpath:config/my-hazelcast.xml
否则,Spring Boot会尝试从默认位置找到Hazelcast配置:工作目录中的 hazelcast.xml 或类路径的根目录。我们还检查是否设置
了 hazelcast.config 系统属性。有关更多详细信息,请参阅 Hazelcast文档。
如果类路径中存在 hazelcast-client ,则Spring Boot首先尝试通过检查以下配置选项来创建客户端:
存在 com.hazelcast.client.config.ClientConfig bean。
由 spring.hazelcast.config 属性定义的配置文件。
hazelcast.client.config 系统属性的存在。
工作目录中的 hazelcast-client.xml 或类路径的根目录。
Spring Boot还为Hazelcast提供了 明确的缓存支持。如果启用了缓存, HazelcastInstance 将自动包含在 CacheManager 实现
中。