ActiveMQ 如何从 application.properties 或 @Annotation [Spring Boot 1.5.8] 中查找外部 context.xml
ActiveMQ How to lookup external context.xml from application.properties or @Annotation [Spring Boot 1.5.8]
我有一个使用 Maven 构建的 Spring Boot 1.5.8 应用程序。 项目与嵌入式 activeMQ 一起工作正常,但是当我尝试设置外部数据源时,我无法从位于 server/conf/
的 context.xml 获取 JNDI 属性]目录
这是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=???
->我们将不胜感激
更新:
我也试过绕过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'
我终于找到了解决方案,at this link。
所以 这是正确的指令 放入 application.properties 以从 JNDI name::
实例化一个 ActiveMQConnectionFactory bean
spring.jms.jndi-name=java:/comp/env/jms/ConnectionFactory
希望对您有所帮助 ;)
我有一个使用 Maven 构建的 Spring Boot 1.5.8 应用程序。 项目与嵌入式 activeMQ 一起工作正常,但是当我尝试设置外部数据源时,我无法从位于 server/conf/
的 context.xml 获取 JNDI 属性]目录
这是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=???
->我们将不胜感激
更新:
我也试过绕过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'
我终于找到了解决方案,at this link。
所以 这是正确的指令 放入 application.properties 以从 JNDI name::
实例化一个 ActiveMQConnectionFactory beanspring.jms.jndi-name=java:/comp/env/jms/ConnectionFactory
希望对您有所帮助 ;)