簡體   English   中英

Spring雲默認配置文件

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

如果仍然無效,請檢查以下兩點:

  • 你有不同包中的配置( DevConfigCloudconfig ),以便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.

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