下面2個不一樣的類實現了同一個接口,@Profile註解指定了具體環境java
// 接口定義 public interface SendMessage { // 發送短信方法定義 public void send(); } // Dev 環境實現類 @Component @Profile("dev") public class DevSendMessage implements SendMessage { @Override public void send() { System.out.println(">>>>>>>>Dev Send()<<<<<<<<"); } } // Stg環境實現類 @Component @Profile("stg") public class StgSendMessage implements SendMessage { @Override public void send() { System.out.println(">>>>>>>>Stg Send()<<<<<<<<"); } } // 啓動類 @SpringBootApplication public class ProfiledemoApplication { @Value("${app.name}") private String name; @Autowired private SendMessage sendMessage; @PostConstruct public void init(){ sendMessage.send();// 會根據profile指定的環境實例化對應的類 } }
在啓動程序的時候經過添加 –spring.profiles.active={profile} 來指定具體使用的配置
例如咱們執行 java -jar demo.jar –spring.profiles.active=dev 那麼下面三個文件中的內容將被如何應用?
Spring Boot 會先加載默認的配置文件,而後使用具體指定的profile中的配置去覆蓋默認配置。spring
application.propertiesapp
app.name=MyApp server.port=8080 spring.profiles.active=dev
application-dev.propertieside
server.port=8081
application-stg.propertiescode
server.port=8082