SpringBoot消息源码解析:ActiveMQ自动配置

ActiveMQ 自动配置

ActiveMQ 是 Apache 提供的一个开源的消息系统,很好地支持了 JMS 规范。在使用ActiveMQ 时需要在 pom 文件中引入
spring-boot-starter-activemq。

ActiveMQ 在 Spring Boot 的自动配置类注册同样在 META-INF/spring.factories 中。

# Auto Configure
org. springframework . boot . autoconfigure . EnableAutoConfiguration=\
org. springframework . boot . autoconfigure . jms . activemq. ActiveMQAutoConfigurati
on, \

ActiveMQAutoConfiguration 类没有具体代码实现,主要通过注解完成功能的实现。

@Configuration(proxyBeanMethods = false)
@AutoConfigureBefore (JmsAutoConfiguration.class)
@AutoConfigureAfter({ JndiConnectionF actoryAutoConfiguration.class })
@Conditional0nClass({ ConnectionFactory. class, ActiveMQConnectionFactory.cl
@ConditionalOnMissingBean(ConnectionFactory.class)
@EnableConfigurationProperties({ ActiveMQProperties. class, JmsProperties.cl
ass })
@Import({ ActiveMQXAConnectionF actoryConfiguration. class,
ActiveMQConnectionFactoryConfiguration.class })public class ActiveMQAutoConfiguration {
}

@AutoConfigureBefore 注解指定该类需在 JmsAutoConfiguration 配置之前进行初始化。前面我们已经讲过,JmsAutoConfiguration 初始化时需 要用到 ActiveMQAutoConfiguration初始化的 ConnectionFactory,因此需要在 JmsAutoConfiguration 之前完成初始化。

@AutoConfigureAfter 中指定了在
JndiConnectionFactoryAutoConfiguration 配置完成之后进行初始化。


JndiConnectionFactoryAutoConfiguration 中主要通过 JNDI 的方式获得 ConnectionFactory实例下面我先看 JndiConnectionFactoryAutoConfiguration 的初始化 Condition 条件代码。

@Configuration(proxyBeanMethods = false)
@AutoConfigureBefore (JmsAutoConfiguration. class)
@ConditionalOnClass (Jms Template.class)
@ConditionalOnMi ssingBean(ConnectionFactory. class)
@Conditional (JndiOrPropertyCondition. class)
@EnableConfigurationProperties ( JmsProperties. class)
public class JndiConnectionF actoryAutoConfiguration {
2
private static final String[] JNDI_ LOCATIONS = { "java:/JmsXA", "java:/XA
Conne -
ctionFactory" };
// JNDI 名称或特定属性的条
static class JndiOrProper
tyCondition extends AnyNestedCondition {
JndiOrPropertyCondition
() {
super(ConfigurationPh
ase. . PARSE_ CONFIGURATION);
@ConditionalOnJndi({ "j
ava:/JmsXA", "java:/XAConnectionFactory" })
static class Jndi {
@Conditiona lOnProperty
(prefix = "spring.jms", name = "jndi -name")
static class Property {
}
}
}

我们不再赘述
JndiConnectionFactoryAutoConfiguration 初始化条件中的常规项,重点看@Conditional 指 定 的 JndiOrPropertyCondition 条 件 。

该 类 的 实 现 就 在
JndiConnectionFactory-AutoConfiguration 内部,通过继承 AnyNestedCondition 来实现判断条件:当指定的 JNDI 生效或 spring.jmsjndi-name 被配置时才会生效。SpringBoot 默认会检查 java:/JmsXA 和 java:/XAConnectionFactory 两个 JNDI 地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值