在Spring-boot中设置默认活动配置文件

时间:2016-06-08 10:47:34

标签: java spring spring-boot

如果未设置production,我希望我的默认有效个人资料为-Dspring.profiles.active

我在我的application.properties中尝试了以下操作,但它不起作用:

spring.profiles.default=production

Spring-boot version = 1.3.5.RELEASE

15 个答案:

答案 0 :(得分:50)

您在这里做的是设置默认的默认配置文件(如果您没有指定@Profile注释,则在任何bean上使用的配置文件)为{{ 1}}。

您实际需要做的是设置默认的有效个人资料,如下所示:

production

答案 1 :(得分:8)

添加--spring.profiles.active=production

示例:

java -jar file.jar --spring.profiles.active=production

答案 2 :(得分:6)

将它放在App.java中:

$key = pack('C*', 1, 2, 3, 4, 5, 6, 7, 8);
$masterbyte = pack('C*', $buffer);
$decmasterkey = mcrypt_decrypt(MCRYPT_DES, $key, $masterbyte, MCRYPT_MODE_ECB);

这是在JHipster

中完成的

答案 3 :(得分:6)

我是这样做的

    System.setProperty("spring.profiles.default", "dev");

main(...)

的最开始

答案 4 :(得分:5)

如果你正在使用maven我会做这样的事情:

生产您的默认个人资料:

<properties>
    <activeProfile>production</activeProfile>
</properties>

作为其他档案的一个例子:

<profiles>
    <!--Your default profile... selected if none specified-->
    <profile>
        <id>production</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <activeProfile>production</activeProfile>
        </properties>
    </profile>

    <!--Profile 2-->
    <profile>
        <id>development</id>
        <properties>
            <activeProfile>development</activeProfile>
        </properties>
    </profile>

    <!--Profile 3-->
    <profile>
        <id>otherprofile</id>
        <properties>
            <activeProfile>otherprofile</activeProfile>
        </properties>
    </profile>
<profiles>

在您的application.properties中,您必须设置:

spring.profiles.active=@activeProfile@

每次都适合我,希望它能解决你的问题。

答案 5 :(得分:2)

首先,对于下面的解决方案,有必要了解始终,弹簧靴将读取application.properties 文件。因此,对方的个人档案文件仅会补充和替换以前定义的属性。

考虑以下文件:

application.properties
application-qa.properties
application-prod.properties

1)非常重要。 application.properties仅此文件必须具有以下行:

spring.profiles.active=@spring.profiles.active@

2)更改QA和PROD配置文件中所需的内容,以查看环境之间的差异。

3)通过命令行,使用以下任一选项启动spring boot应用程序:

它将使用默认的application.properties文件启动应用:

mvn spring-boot:run

它将加载默认的application.properties文件,并在application-qa.properties文件之后,替换和/或补充默认配置:

mvn spring-boot:run -Dspring.profiles.active=qa

此处相同,但使用生产环境而不是质量检查:

mvn spring-boot:run -Dspring.profiles.active=prod

答案 6 :(得分:2)

我们在Java中设置spring.profiles.active时遇到了类似的问题。

这是我们在尝试了四种提供spring.profiles.active的方式之后最终得出的结论。

java-8

$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This works fine
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works

java-11

$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This doesn't works
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works

注意::如果您在spring.profiles.active文件中指定application.properties,请确保为Java提供spring.config.locationspring.config.additional-location选项如上所述。

答案 7 :(得分:1)

当前使用Maven + Spring Boot。我们的解决方案如下:

application.properties

#spring.profiles.active= # comment_out or remove

securityConfig.java

@Value(${spring.profiles.active:[default_profile_name]}")
private String ACTIVE_PROFILE_NAME;

信用以MartinMlima开始。此处提供了类似的答案:

How do you get current active/default Environment profile programmatically in Spring?

答案 8 :(得分:1)

您还可以在@Profile批注中包含多个列表

@Profile({"dev","default"})

如果将“默认”设置为附加值,则不必指定spring.profiles.active

答案 9 :(得分:0)

在AWS LAMBDA中:

对于$ sam local,请在sam模板yml文件中添加以下行:

Resources:
   FunctionName:
       Properties:
           Environment:
               Variables:
                  SPRING_PROFILES_ACTIVE: local

但是在AWS Console中: 在您的Lambda Environment变量中只需添加:

密钥:JAVA_TOOL_OPTIONS值:-Dspring.profiles.active=dev

enter image description here

答案 10 :(得分:0)

如果正在创建Spring Boot应用程序,则根据环境可以有一个单独的应用程序属性文件。 例如-开发环境的属性文件, application-dev.properties

spring.hivedatasource.url=<hive dev data source url>
spring.hivedatasource.username=dev
spring.hivedatasource.password=dev
spring.hivedatasource.driver-class-name=org.apache.hive.jdbc.HiveDriver

application-test.properties:

spring.hivedatasource.url=<hive dev data source url>
spring.hivedatasource.username=test
spring.hivedatasource.password=test
spring.hivedatasource.driver-class-name=org.apache.hive.jdbc.HiveDriver

还有一个主要的application.properties文件来选择配置文件:

application.properties:

spring.profiles.active=dev
server.tomcat.max-threads = 10
spring.application.name=sampleApp

如下定义数据库配置:

@Configuration
@ConfigurationProperties(prefix="spring.hivedatasource")
public class DBConfig {

    @Profile("dev")
    @Qualifier("hivedatasource")
    @Primary
    @Bean
    public DataSource devHiveDataSource() {
        System.out.println("DataSource bean created for Dev");
        return new BasicDataSource();
    }

    @Profile("test")
    @Qualifier("hivedatasource")
    @Primary
    @Bean
    public DataSource testHiveDataSource() {
        System.out.println("DataSource bean created for Test");
        return new BasicDataSource();
    }

这将根据application.properties文件中设置的活动配置文件自动创建BasicDataSource bean。 运行Spring-boot应用程序并进行测试。

请注意,这将首先创建一个空bean,直到调用getConnection()为止。 连接可用后,您可以使用该DataSource bean获得url,驱动程序类等。

答案 11 :(得分:0)

如果您将AWS Lambda与SprintBoot结合使用,则必须在环境变量下声明以下内容:

键:JAVA_TOOL_OPTIONS和值:-Dspring.profiles.active = dev

答案 12 :(得分:0)

无需每次更改源代码即可完成此操作的巧妙方法是使用OS环境变量SPRING_PROFILES_ACTIVE

export SPRING_PROFILES_ACTIVE=production

how-to-set-active-spring-profiles

答案 13 :(得分:0)

尝试一下: @PropertySource("classpath:${spring.profiles.active:production}_file.properties")

答案 14 :(得分:0)

如果您使用 application.yml 作为您的配置,则将其添加到其中,以设置默认的活动配置文件:

spring:
  profiles:
    active: production