我們平常使用springboot來配置端口都是在application.properties中配置
server.port=8080
這樣的話,我們對於的模塊啓動時候,就是使用8080端口。但是這樣的話,我們在發佈服務的時候,需要在每個模塊都配置一個
application.properties,並且在其中配置好對應的端口。這樣文件的數量還是比較多的,爲了簡化配置文件。我想來嘗試能不能把所有的端口配置都放在同一個文件裏面,每一個模塊都配置一個對應的端口。我們使用如下的代碼來配置對應的端口,還是把端口放在application.properties裏面,直接在tomcat的配置端口的代碼中引用。
package com.zhilink.wms.base.common.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
/**
* @ClassName TomcatConfig
* @Date 2019-08-26
* @Desc TomcatContextCustomizer
**/
@Component
public class TomcatConfig implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Value("${server.m1.port}")
private int customizePort;
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
factory.setPort(customizePort);
}
}
我們的項目結構是m1作爲父模塊,其他模塊依賴於m1模塊。那麼這樣配置之後,我們的m1模塊是可以成功啓動的,並且我的端口就是我在application.properties裏面配置的端口。可是當我啓動m2模塊的時候就出現問題了。啓動m2的時候,也許要去讀取m1中配置的server.m1.port,這個時候就會出現注入失敗的錯誤了。
那麼改如何解決呢?
有兩種方式,
第一:m1的端口號配置爲固定端口,比如 @Value("${server.port:8083}"),這樣我在其他模塊使用的時候就不會出現注入失敗的錯誤。
第二:在m1中application.properties配置server.m1.port=8080,後續的引用m1的模塊的其他模塊的application.properties文件,都需要加上server.m1.port=8080,這樣也不會出現類似的問題。
但是爲什麼會報這樣的錯誤,我還是不是很清楚。希望有了解相關問題的大神可以解惑。
上述只是個人理解,如有錯誤還請指正!