如何在springboot应用程序中设置WMQConstants.USERID以连接到IBM MQ?

问题描述 投票:0回答:0

我正在尝试通过我的 Spring Boot 应用程序连接到 IBM MQ(远程队列)。

配置:

@Configuration
@EnableJms
@ConditionalOnProperty(value = "mq.enabled", havingValue = "true")
@Import({MQAutoConfiguration.class, JmsAutoConfiguration.class})
public class MQConfiguration {

  @Bean
  JmsListenerContainerFactory<?> jmsListenerContainerFactory(
      ConnectionFactory connectionFactory,
      DefaultJmsListenerContainerFactoryConfigurer configurer) {
    var factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    return factory;
  }
}

听众:

@JmsListener(destination = "${test-queue}")
  public void receive(TextMessage message) {
    try {
      var foo =
          objectMapper.readValue(message.getText(), Foo.class);
      LOGGER.info("Incoming JMS message : " + message.getText());
      //Business logic
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

application.yaml:

ibm:
  mq:
    channel: DEV.CHNL
    user: app
    conn-name: ${ibm.mq.host}(${ibm.mq.port})
    queue-manager: QM_NAME

pom.xml:

<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>mq-jms-spring-boot-starter</artifactId>
    <version>${ibm-mq.version}</version>
</dependency>

队列管理器需要 UserId 才能连接到队列。 userId 由进程名称自动设置,而不是来自此处提到的 yaml https://www.ibm.com/support/pages/how-specify-userid-and-password-when-connecting-ibm-mq

如果该属性设置为默认值,则 Java 的 WebSphere MQ 类将查询 Java 系统属性 user.name。 即使设置了这些道具后,它也无法按预期工作。

ibm.mq.user
ibm.mq.password

IBM 的核心内部库以某种方式读取 System.getProperty("user.name")。

我唯一可以设置的方法是uing

set - _JAVA_OPTIONS=-Duser.name=myUser

我们是否可以设置 WMQConstants.USERID 而无需设置 java 用户名?

java spring spring-boot ibm-mq mq
© www.soinside.com 2019 - 2024. All rights reserved.