【问题标题】:SpringBoot and IBM MQ connection properties not overrided on deploy部署时未覆盖 Spring Boot 和 IBM MQ 连接属性
【发布时间】: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


【解决方案1】:

这开始是一个评论,但当我写它时,我怀疑您缺少相关的 ibm.mq 属性。如果您不提供以下属性:

ibm.mq.queueManager
ibm.mq.channel
ibm.mq.connName
ibm.mq.user
ibm.mq.password

然后他们默认为

ibm.mq.queueManager=QM1
ibm.mq.channel=DEV.ADMIN.SVRCONN
ibm.mq.connName=localhost(1414)
ibm.mq.user=admin
ibm.mq.password=passw0rd

即。本地主机。

mq-jms-spring-boot-starter利用

import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "ibm.mq")

读取连接属性。在这个模块https://github.com/ibm-messaging/mq-jms-spring/blob/master/mq-jms-spring-boot-starter/src/main/java/com/ibm/mq/spring/boot/MQConfigurationProperties.java

所以它依赖 spring 来提供前缀为 ibm.mq 的属性。 IE。只要通过@ConfigurationProperties 跳转到知道如何处理覆盖,它就会使它们对mq-jms-spring-boot-starter 可用。

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2019-06-16
  • 2022-07-12
  • 1970-01-01
相关资源
最近更新 更多