目的:同標題1樣,方可進行其他設定或用途
必須知識:
- java 8
- spring系列
材料:
- yml
- 自定義資料結構 與設定檔
第1步:
我們先來想想需要什麼的資訊放在yml
此篇與「SpringBoot使用jms聆聽多個MQ(依據yml動態新增)」有關聯
採用這篇會用的資訊來做說明
```
mqList:
- concurrency: "10-100"
receive-timeout: -1
queueManager: 自定義佇列管理者
channel: 自定義頻道
connName: host(ip)
user:
destination: 目標佇列名稱
- concurrency: "10-100"
receive-timeout: -1
queueManager: 自定義佇列管理者
channel: 自定義頻道
connName: host(ip)
user:
destination: 目標佇列名稱
```
mqList為所有資訊的頭
-為1個完整資訊的頭
1個完整資訊底下有7個參數
這就是我們的yml
第2步:
我們要開始定義資料結構
這結構至少要和yml一模一樣的結構
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
@Getter
@Setter
public class MQInfoConfiguration {
// 為所有資訊的頭因此名稱為mqList
// 每1組資訊都有7個參數的資料結構 稱為 MQInfo
public List<MQInfo> mqList;
@Getter
@Setter
public static class MQInfo { // 這邊就根據我們要的7個屬性做設定
public String concurrency;
public int receiveTimeout;
public String queueManager;
public String channel;
public String connName;
public String user;
public String destination;
}
}
最後:
我們要進行注入與資料設定
以下是虛擬碼
@Autowired
MQInfoConMQInfoConfiguration mQInfoConfiguration;
public void setMQ(Dto dto) {
// 如果yml資訊有存在繼續進行
if (CollectionUtils.isNotEmpty(mQInfoConfiguration.getMqList())) {
int i = 0;
// 跟據每1組資訊進行設定
for (MQInfo.MQInfo mQInfo : mQInfoConfiguration.getMqList()) {
Factory factory = this.doSth(
mQInfo.getQueueManager(),
mQInfo.getChannel(),
mQInfo.getConnName()
);
...
}
補充:
這邊給大家幾個不一樣的形式
(1)
yml都不變
透過@Value注入到變數
程式變得很攏長,且每個變數其實是獨立的,只有當看到@Value取用yml的路徑才會知到是有關聯的
因此不建議這樣注入
(2)
最上方跟大家介紹的模式演變是透過現在要介紹的
@Autowired(required= false)
MQInfoConMQInfoConfiguration mQInfoConfiguration = new MQInfoConMQInfoConfiguration();
public init(){
List<MQInfo> mqList = new ArraryList<>();
MqInfo mqInfo = new MqInfo();
mqInfo.setChannel("123");
...
// set the others
...
mqList.add(mqInfo);
MqInfo mqInfo2 = new MqInfo();
...
mqList.add(mqInfo2);
// 最後在set mQInfoConfiguration
mQInfoConfiguration.setMqList(mqList);
}
// 這邊設定參數 部份操作是1樣的
public void setMQ(Dto dto) {
// 如果yml資訊有存在繼續進行
if (CollectionUtils.isNotEmpty(mQInfoConfiguration.getMqList())) {
int i = 0;
// 跟據每1組資訊進行設定
for (MQInfo.MQInfo mQInfo : mQInfoConfiguration.getMqList()) {
Factory factory = this.doSth(
mQInfo.getQueueManager(),
mQInfo.getChannel(),
mQInfo.getConnName()
);
...
}
ref:
主要是給自己的一個紀錄,也分享給有需要的夥伴
註解部分有提及一些參考的連結,有興趣可以點進去看看喔
這是一個心血來潮,產生的文章
若有喜歡或交流的部分都歡迎在下方留言,多多關照。