【问题标题】:Looking for a way to override application.properties values during application runtime寻找在应用程序运行时覆盖 application.properties 值的方法
【发布时间】:2022-02-01 16:51:52
【问题描述】:

我编写了一个小型应用程序,使用 Spring boot 将消息发布到 IBM MQ。我的 applications.properties 中有以下属性。当我输入目标队列名称和消息时代码正常工作,现在我想输入队列管理器名称并根据队列管理器名称 ibm.mq.QueueManager,ibm.mq.connName 应该更改。感谢有人给我一个建议。我需要想出一个单独的方法来启动 MQ 连接吗?

ibm.mq.QueueManager=KAU.TST
ibm.mq.channel=KAU.CONN
ibm.mq.connName=192.168.1.26(1540)
ibm.mq.user=
ibm.mq.password=

我在我的控制器类中包含了以下设置器,但它似乎没有按我的意图覆盖属性文件。

    @Value("${ibm.mq.QueueManager:KAU.TST}")
    String destQM;


    public void setQueueManager(String destQM) {
        this.destQM= destQM;
    }

当前发布消息的方法

    @Autowired
    private JmsTemplate jmsTemplate;
    public String dropmessage()
    {
        
          try{
              //String msg="IBM MQ integration testing with spring boot";
              jmsTemplate.convertAndSend(qname, msg);
              System.out.println("Message Sent :"+msg);
              return "OK";
          }catch(JmsException ex){
              ex.printStackTrace();
              return "FAIL";
          }     
        
    }

【问题讨论】:

  • 为什么添加一个 setter 会神奇地改变 queuemanager?如何覆盖属性是explained in the documentation。这是假设这些是application.properties 的一部分。

标签: java spring-boot ibm-mq


【解决方案1】:

您可以使用工厂定制器方法对 qmgr 配置进行动态更改。例如:

@Bean
public MQConnectionFactoryCustomizer myCustomizer() {
  MQConnectionFactoryCustomizer c = new MQConnectionFactoryCustomizer() {
  @Override
  public void customize(MQConnectionFactory factory) {
    System.out.println("Changing port for " + factory.getQueueManager());
     try {
       factory.setPort(1415);
     } catch (JMSException e) { 
     }
   }
 };
 return c;
}

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多