簡體   English   中英

Spring:根據配置文件選擇@Service

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM