微服务架构之Spring Boot(六十)

2022-05-23 15:39:30 浏览数 (1)

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 实现

中。

0 人点赞