【问题标题】:How to load the properties based on the environment defined in application.properties in Spring application. NOT with Springboot如何在 Spring 应用程序中基于 application.properties 中定义的环境加载属性。不使用 Springboot
【发布时间】:2021-06-19 04:46:24
【问题描述】:

我是春天的新手,我正在研究它。并偶然发现了@Profile 注释。

我想用Spring(不是Springboot)写一个简单的项目,学习如何使用@profile注解根据环境加载属性。几乎无处不在,示例(Ex1Ex2)我只在 Springboot 中看到。我想知道我们是否不能编写一个可以根据环境(dev、prod)动态加载属性的 Spring 应用程序。

  1. 一些示例(Ex3Ex4Ex5)与 @Profile 一起显示,但这些示例已经硬编码了每个环境的 bean 详细信息,如下所示。这就是我们必须编写属性加载的方式吗?

    @Profile("dev")
    @Bean
    public String devDBCcnnection() {        
    System.out.println(dbConfiguration.getUrl());    
    return "DB Connection for Dev";
    }
    
    @Profile("test")
    @Bean
    public String devTestCcnnection() {  
     System.out.println(dbConfiguration.getDriverClassName());
     return "DB Connection for Test";
    }
    
    @Profile("prod")
    @Bean
    public String devProdCcnnection() {
    System.out.println("DB Connection for Prod");
    return "DB Connection for Prod";
    }
    
  2. 它必须像上面的例子一样为每个配置文件编写一个 bean?

有人可以告诉我使用@Profiles,不能像在 Spring 应用程序中那样动态加载属性值吗?

如果您可以提供 Spring 5 的示例,请不胜感激

【问题讨论】:

  • 您有多个应用程序属性配置文件还是只有一个文件?如果你使用一个文件,你可以在你的 pom (maven) 文件中设置这些属性。

标签: java spring spring-boot


【解决方案1】:

几乎无处不在,示例(Ex1,Ex2)我只看到 弹簧靴。我想知道我们是否不能编写 Spring 应用程序 可以根据环境动态加载属性 (开发,产品)。

Spring boot 使用 spring 上下文。 spring 上下文允许您使用配置文件。因此,在简单的 Spring 项目(非 spring-boot)中使用配置文件没有问题。

您可以通过多种方式使用个人资料。

其中一个示例是您使用具有 @Profile 并在春季注册特定配置文件的特定 bean 提供的示例。

在企业应用程序中更常用的另一种方法是发布一个包含多个 application.yaml 文件的 jar 应用程序。例如,您发布您的应用程序,其中包含dev-application.yamlqa-application.yaml。然后,您可以启动您的应用程序,选择要激活的特定配置文件。然后,当应用程序启动时,将使用特定的 application.yaml 来构建 spring 上下文。因此应用程序将以qa-application.yaml 启动,并与 QA 数据库建立连接。

但请注意默认的 application.yaml 也会被加载。特定的 application.yaml 例如 qa-application.yaml 将在默认 application.yaml 之上加载。

以下文章包含有关弹簧型材的非常好的信息 spring profiles article

考虑到我在这里的例子,我引用了那篇文章中的一些相关内容。

默认配置文件 默认配置文件始终处于活动状态。弹簧靴 将 application.yml 中的所有属性加载到默认配置文件中。我们 可以将配置文件重命名为 application-default.yml 并且它 也一样。

其他配置文件将始终在默认配置文件之上进行评估。 这意味着如果在默认配置文件中定义了一个属性,但是 不在 qa 配置文件中,属性值将从 默认配置文件。这对于定义默认值非常方便 在所有配置文件中均有效。

为了激活特定的配置文件

对于非 spring-boot 项目,这里是一个很好的答案spring active profile

对于 spring-boot 项目,您可以

  1. 使用系统变量来启动你的 jar 文件

    java -Dspring.profiles.active=qa -jar myApp.jar

  2. 使用环境属性来启动你的 jar 文件

    export SPRING_PROFILES_ACTIVE=qa

    java -jar myApp.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2015-11-18
    • 2017-09-06
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多