[英]Spring cloud default profile
在我正在進行的項目中,我們需要多個配置文件,即“默認”和“雲”。
DefaultContext和CloudContext包含相同的bean定義我們正在使用PCF(Pivotal Cloud Foundry)
我們創建了一個界面
public interface Config {
public DataSource getDataSource();
public SomeService getService();
}
然后使用此接口實現每個配置文件
@Primary
@Configuration
@Profile("default")
public class DevConfig implements Config
{
public DataSource getDataSource() {
// create and return production datasource
}
public SomeService getService() {
// Create and return production service
}
}
然后對雲做同樣的事情。
@Configuratio
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig implements Config
{
public DataSource getDataSource() {
// create and return dummy datasource
}
public SomeService getService() {
// Create and return dummy service
}
}
我們在處理器文件中的服務調用中進行自動裝配。
@Service("processor")
public class Processor {
@Autowired Config dsConfig;
public object get(int Number)
{
return dao.get(Number,dsConfig.getDataSource());
}
}
如果我們部署在PCF中,它的工作正常,因為配置文件是雲。 如果我們在本地運行,它應該獲取默認配置文件,但dsConfig為null。 你能幫忙嗎?
@Configuration
類不可用於自動裝配。
正如@spencergibb在評論中指出的那樣,您需要告訴容器使這些類可用於自動裝配。
為此,用@Component
注釋它們。
像這樣的東西:
@Component
@Profile("default")
public class DevConfig implements Config
{
public DataSource getDataSource() {
// create and return production datasource
}
public SomeService getService() {
// Create and return production service
}
}
如果仍然無效,請檢查以下兩點:
DevConfig
和Cloudconfig
),以便ContextScan找不到它嗎? Dev
)。 您可以將此剪輯剪切到您的代碼(來自JHipster)以記錄活動配置文件。
@Autowired
private Environment env;
/**
* Initializes Application.
* <p/>
* Spring profiles can be configured with a program arguments --spring.profiles.active=your-active-profile
* <p/>
*/
@PostConstruct
public void initApplication() throws IOException {
if (env.getActiveProfiles().length == 0) {
log.warn("No Spring profile configured, running with default configuration");
}
else {
log.info("Running with Spring profile(s) : {}", Arrays.toString(env.getActiveProfiles()));
}
}
我寧願自動裝配數據源和服務類而不是配置類。 通過這種方式,您不需要任何配置實例,並直接自動裝配您想要的任何類。
因此,類將如下所示。 默認配置:
@Primary
@Configuration
@Profile("default")
public class DevConfig implements Config
{
@Bean
public DataSource getDataSource() {
// create and return production datasource
}
@Bean
public SomeService getService() {
// Create and return production service
}
}
雲配置:
@Configuration
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig implements Config
{
@Bean
public DataSource getDataSource() {
// create and return dummy datasource
}
@Bean
public SomeService getService() {
// Create and return dummy service
}
}
處理器類:
@Service("processor")
public class Processor {
@Autowired
private DataSource dataSource;
public object get(int Number)
{
return dao.get(Number,datasource);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.