ActiveMQ如何从application.properties或@Annotation [Spring Boot 1.5.8]查找外部context.xml

时间:2017-10-27 00:12:05

标签: spring-boot activemq jndi context.xml application.properties

我有一个使用Maven构建的 Spring Boot 1.5.8 应用程序。 项目适用于嵌入式activeMQ ,但是当我尝试设置外部数据源时,我无法从位于 server/conf/ 目录中的context.xml获取JNDI属性/ p>

这是 context.xml

 <Context>
    <Resource name="jdbc/TEST" auth="Container" type="javax.sql.DataSource"
                 maxTotal="100" maxIdle="30" maxWaitMillis="10000"
                 username="TEST" password="TEST" driverClassName="oracle.jdbc.OracleDriver"
                 url="jdbc:oracle:thin:@127.0.0.1:1521/TEST"/>
    <Resource name="jms/ConnectionFactory" auth="Container" 
                type="org.apache.activemq.ActiveMQConnectionFactory" 
                description="JMS Connection Factory"
                factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
                brokerURL="tcp://127.0.0.1:8161" 
                brokerName="LocalActiveMQBroker"/>
    <Resource name="jms/ActQueue" 
                auth="Container" 
                type="org.apache.activemq.command.ActiveMQQueue" 
                description="TESTQueue"
                factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
                physicalName="TEST.QUEUE"/>
  </Context>

最初应用程序数据源位于 application.properties 内:

# Oracle settings
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:TEST
spring.datasource.username=TEST
spring.datasource.password=TEST
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver    

#ActiveMQ settings
spring.activemq.broker-url=tcp://localhost:8161
spring.activemq.broker-name=LocalActiveMQBroker
spring.activemq.user=TEST
spring.activemq.password=TEST

我的目标是通过JNDI名称获取(查找)server/conf/context.xml中的JNDI资源属性站点。

例如,对于DB来说这很容易,只需写下这两行并对其他行进行评论:

# Oracle settings from external context.xml (it works!)
spring.datasource.jndi-name=java:/comp/env/jdbc/ACTIgrue
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

除此之外,我如何才能获得spring.activemq.broker-url=???spring.activemq.broker-name=???

- &gt;我们将非常感谢您的帮助

更新

我还尝试绕过application.properties文件并直接使用注释获取它,如下所示:

@Resource(name="java:/comp/env/jms/ConnectionFactory")
private ActiveMQConnectionFactory conn;

但发生了以下例外情况:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'java:/comp/env/jms/ConnectionFactory'

1 个答案:

答案 0 :(得分:1)

最后,我找到了一个解决方案,at this link

所以这是正确的指令,将application.properties放入JNDI名称::

的ActiveMQConnectionFactory bean实例中
spring.jms.jndi-name=java:/comp/env/jms/ConnectionFactory

我希望这会有所帮助;)