簡體   English   中英

尋找一種在應用程序運行時覆蓋 application.properties 值的方法

[英]Looking for a way to override application.properties values during application runtime

我編寫了一個小型應用程序,使用 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=

我在我的 controller class 中包含了以下設置器,但它似乎沒有按照我的意圖覆蓋屬性文件。

    @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";
          }     
        
    }

您可以使用工廠定制器方法對 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM