spring.profiles.active = production与spring.profiles.active = local之间的区别是什么?

时间:2017-06-24 22:37:57

标签: spring

当我尝试运行spring boot应用程序时。

application.properties文件中有一个属性,其中包含属性spring.profiles.active=production

在网上搜索有关此属性的详细信息时,我知道spring.profiles.active=local

有人可以解释这些细节吗?

2 个答案:

答案 0 :(得分:1)

当应用程序从开发过渡到生产时,某些特定于环境的开发选择是不合适的或不起作用。

例如,考虑数据库配置。在开发环境中, 您可能会使用预装了测试数据的嵌入式数据库,如下所示:

@Bean(destroyMethod="shutdown")
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
    .addScript("classpath:schema.sql")
    .addScript("classpath:test-data.sql")
    .build();
}

在制作环境中, 您可能希望使用JNDI从容器中检索DataSource

@Bean
public DataSource dataSource() {
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    jndiObjectFactoryBean.setJndiName("jdbc/myDS");
    jndiObjectFactoryBean.setResourceRef(true);
    jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
    return (DataSource) jndiObjectFactoryBean.getObject();
}

从Spring 3.1开始,您可以使用配置文件。 Method-leve @Profile注释从Spring 3.2开始工作。在Spring 3.1中,它只是类级别。

@Configuration
public class DataSourceConfig {
    @Bean(destroyMethod="shutdown")
    @Profile("development")
    public DataSource embeddedDataSource() {
        return new EmbeddedDatabaseBuilder()
        .setType(EmbeddedDatabaseType.H2)
        .addScript("classpath:schema.sql")
        .addScript("classpath:test-data.sql")
        .build();
    }

    @Bean
    @Profile("production")
    public DataSource jndiDataSource() {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("jdbc/myDS");
        jndiObjectFactoryBean.setResourceRef(true);
        jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
        return (DataSource) jndiObjectFactoryBean.getObject();
    }
}

每个DataSource bean都在一个配置文件中,只有在规定的配置文件处于活动状态时才会创建。无论哪个配置文件处于活动状态,都将始终创建未提供配置文件的任何bean。

您可以为个人资料提供任何逻辑名称。

答案 1 :(得分:0)

您可以使用此属性让Spring知道哪些配置文件应该处于活动状态(在启动应用程序时使用)。例如,如果您在application.properties中或通过参数-Dspring.profiles.active = prod;你告诉Spring,在prod配置文件下运行。这意味着 - Spring将查找“application-prod.yml”或“application-prod.properties”文件,并将加载其下的所有属性。

您还可以通过@Profile(“PROFILE_NAME”)注释bean(方法或类) - 这可以确保将bean映射到某个配置文件。

您可以将多个配置文件传递给spring.profiles.active。

文档中的更多信息 - https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html