profile
使用說明:
@profile註解的作用是指定類或方法在特定的 Profile 環境生效,任何@Component或@Configuration註解的類都可以使用@Profile註解。
在使用DI來依賴注入的時候,能夠根據@profile標明的環境,將注入符合當前運行環境的相應的bean。
使用要求
@Component或@Configuration註解的類可以使用@profile
@Profile中需要指定一個字符串,約定生效的環境
@Profile的使用位置
@Prifile修飾類
DevProfile.java
@Configuration
@Profile("dev")
public class DevProfile {
private static final Logger log = LoggerFactory.getLogger(DevProfile.class);
@PostConstruct
public void init(){
log.info("-----this profile is dev-----");
}
}
TestProfile
@Configuration
@Profile("test")
public class TestProfile {
private static final Logger log = LoggerFactory.getLogger(TestProfile.class);
@PostConstruct
public void init(){
log.info("-----this profile is test-----");
}
}
通過指定profile的值啓動即可;
測試結果
dev
test
@Profile修飾方法
@Configuration
public class TestProfile {
private static final Logger log = LoggerFactory.getLogger(TestProfile.class);
@Profile("test")
@Bean
public ProfileDto getTest(){
return new ProfileDto("test");
}
@Profile("dev")
@Bean
public ProfileDto getDev(){
return new ProfileDto("dev");
}
}
PageController.java
@RequestMapping("/")
@RestController
public class PageController {
@Resource
private ProfileDto profileDto;
@GetMapping("/profileTest")
public ProfileDto profileTest(){
return profileDto;
}
}
測試結果
訪問:http://localhost:8082/profileTest
dev
{"env":"dev"}
test
{"env":"test"}
@Profile修飾註解
@Profile註解支持定義在其他註解之上,以創建自定義場景註解。這樣就創建了一個@Dev註解,
該註解可以標識bean使用於@Dev這個場景。後續就不再需要使用@Profile("dev")的方式,這樣即可以簡化代碼。
註解 @DevEnv
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Profile("dev")
public @interface DevEnv {
}
註解 @TestEnv
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Profile("dev")
public @interface TestEnv {
}
@Configuration
public class TestProfile {
private static final Logger log = LoggerFactory.getLogger(TestProfile.class);
@TestEnv
@Bean
public ProfileDto getTest() {
return new ProfileDto("test");
}
@DevEnv
@Bean
public ProfileDto getDev() {
return new ProfileDto("dev");
}
}
測試方法跟結果跟修飾方法一致,不在贅述。
激活 Profile
實際使用中,註解中標示了prod、test、dev等多個環境,
運行時使用哪個profile由spring.profiles.active控制,以下說明2種方式 :配置文件方式、命令行方式。
配置文件方式
application.properties
spring.profiles.active=dev
application.yml
spring:
profiles:
active: dev
命令行方式
在打包後運行的時候,添加參數.
java -jar deme-profile-SNAPSHOT.jar --spring.profiles.active=dev