【问题标题】:Is it possible to prevent a Spring Boot app from attempting to connect to IBM MQ?是否可以阻止 Spring Boot 应用程序尝试连接到 IBM MQ?
【发布时间】:2021-05-06 18:26:36
【问题描述】:

我有一个使用 IBM Spring Boot 启动器连接到 IBM MessageQueue 服务的 Spring Boot 应用程序:

com.ibm.mq:mq-jms-spring-boot-starter:2.1.2

我有一个监听队列的组件类,它有以下注释来启用/禁用连接到队列:

@ConditionalOnProperty(name = "queue.enabled", havingValue = "true")

我的 application.properties 中还有以下属性:

queue.enabled=false

当我连接到 ActiveMQ 时,此注释用于禁用队列连接,但在更改代码库以连接到 IBM MQ 时,连接似乎不受 ConditionalOnProperty 影响并且总是尝试连接。

有没有办法在服务器启动时启用/禁用连接到 IBM MQ 服务?

【问题讨论】:

    标签: java spring-boot ibm-mq


    【解决方案1】:

    mq-jms-spring-boot-starter 依赖项中存在的 MQAutoConfiguration 类是导致尝试队列连接的原因。

    您有两种选择来解决此问题,一种要求您设置特定属性,另一种允许您定义要用于启用或禁用队列连接的属性。

    选项 1

    在您的 application.properties 文件中设置值 spring.jta.enabled = false。 (如果您在应用程序中使用事务,这可能不是首选选项。)

    查看 MQAutoConfiguration 类,您可以看到它以属性 spring.jta.enabled 为条件。在 application.properties 文件中将该属性设置为 false 将阻止注册 MQAutoConfiguration 类,这意味着没有注册 MQ bean,因此不会尝试连接到队列。

    选项 2(如果您不想禁用 JTA)

    创建包com.ibm.mq.spring.boot 并在那里创建MQAutoConfiguration 类的副本。将@ConditionalOnProperty 注释修改为您选择的属性。

    【讨论】:

      【解决方案2】:

      只需排除 application.properties 中的配置即可。

      spring.autoconfigure.exclude=com.ibm.mq.spring.boot.MQAutoConfiguration
      

      【讨论】:

        猜你喜欢
        • 2020-06-16
        • 2021-09-25
        • 1970-01-01
        • 2019-06-01
        • 2020-10-13
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        相关资源
        最近更新 更多