【发布时间】:2021-08-01 01:35:26
【问题描述】:
我有一个带有本地配置的 SpringBoot 应用程序来连接和侦听本地队列
ibm:
mq:
queueManager: LOCAL_QM
channel: DEV.ADMIN.SVRCONN
connName: localhost(1414)
user: admin
password: passw0rd
user-authentication-m-q-c-s-p: false
当我使用 Gitlab CI 部署应用程序时,一些属性被覆盖(使用 ../tomcat/current/conf/Catalina/localhost/ 中的 war_name.xml 文件),例如数据库连接属性和 mq 连接属性以监听开发或资格环境队列。
但是当应用启动时数据库连接正常但MQ连接不行(应用使用application.yml文件中定义的本地连接属性)
当我检查远程服务器上的 xml 文件时,属性被覆盖。 当我使用像弹簧执行器这样的工具时,我可以使用特定的 env 属性覆盖正确的属性。
但在日志中:/tomcat/current/logs/catalina.out 我可以读到应用程序尝试连接到本地队列管理:LOCAL_QM 而不是特定环境队列。
2021-05-11 12:19:23.484 ERROR 14483 --- [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer : Could not refresh JMS Connection for destination '***' - retrying using FixedBackOff{interval=5000, currentAttempts=16093, maxAttempts=unlimited}. Cause: JMSWMQ0018: Failed to connect to queue manager 'LOCAL_QM' with connection mode 'Client' and host name 'localhost(1414)'.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE')
属性在同一个xml文件中,它适用于数据库“spring.datasource”但不适用于MQ“ibm.mq”
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="spring.datasource.url" value="jdbc:postgresql://***:5432/**" type="java.lang.String"/>
<Environment name="spring.datasource.username" value="****" type="java.lang.String"/>
<Environment name="spring.datasource.password" value="****" type="java.lang.String"/>
<Environment name="ibm.mq.queueManager" value="***" type="java.lang.String"/>
<Environment name="ibm.mq.channel" value="***" type="java.lang.String"/>
<Environment name="ibm.mq.connName" value="***" type="java.lang.String"/>
<Environment name="ibm.mq.user" value="***" type="java.lang.String"/>
<Environment name="ibm.mq.password" value="" type="java.lang.String"/>
</Context>
知道为什么不覆盖这些属性吗?
谢谢
【问题讨论】:
-
您遵循哪个指南/文档?
-
参考 spring 文档 - docs.spring.io/spring-boot/docs/current/reference/html/... - 是覆盖优先级的顺序。
标签: spring-boot gitlab gitlab-ci ibm-mq spring-jms