[英]Spring: Selecting @Service based on profile
我有一個接口定義如下:
public interface MyService {
}
實現它的兩個類:
@Service
@Profile("dev")
public class DevImplementation implements MyService {
}
和
@Service
@Profile("prod")
public class ProdImplementation implements MyService {
}
還有另一項服務嘗試使用它:
@Service
public MyClass {
@Autowired
MyService myservice;
}
問題是我在運行代碼時遇到NoSuchBeanException
。 它運行使用
mvn spring-boot:run -P dev
我究竟做錯了什么?
使用-P
可以啟用Maven配置文件。 但Maven配置文件獨立於Spring配置文件。 只要您沒有配置Maven配置文件來設置適當的Spring屬性,就必須以這種方式啟用Spring配置文件:
mvn spring-boot:run -Dspring.profiles.active=dev
另一種方法是使用生產配置文件,並且開發是隱含的,例如,未設置
@Component
@Profile("prod")
public class ProdImplementation implements MyService {
}
...並且開發人員實現的配置文件為“!prod”。
@Component
@Profile("!prod")
public class DevImplementation implements MyService {
}
因此要在生產模式下運行,您必須輸入配置文件...
> mvn spring-boot:run -Dspring.profiles.active=prod
...和開發模式不需要配置文件......
> mvn spring-boot:run
IMO有點容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.