如何根据Spring应用程序中application.properties中定义的环境加载属性.不是春靴



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

我想用Spring(而不是Springboot(编写一个简单的项目,学习如何使用@profile注释基于环境加载属性。几乎在所有地方,我只看到Springboot的例子(Ex1,Ex2(。我想知道我们是否不能编写一个可以根据环境(dev,prod(动态加载属性的Spring应用程序。

  1. 一些示例(Ex3、Ex4、Ex5(使用@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 的样品,不胜感激

几乎无处不在,我看到的例子(Ex1,Ex2(只有春靴。我想知道我们是否不能编写Spring应用程序可以根据环境动态加载属性(dev,prod(。

Spring引导使用Spring上下文。弹簧上下文允许您使用配置文件。因此,将概要文件与简单的Spring项目(非Spring引导(一起使用是没有问题的。

可以通过多种方式使用配置文件。

其中一个例子是您给出的具有@Profile的特定bean,并在spring中为特定概要文件注册。

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

但是要小心,默认的application.yaml也会被加载。特定的应用程序.yaml(例如qa-application.yaml(将加载在默认的application.yaml之上。

下面的文章包含了关于弹簧轮廓的非常好的信息弹簧型材制品

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

默认配置文件默认配置文件始终处于活动状态。弹簧防尘套将application.yml中的所有属性加载到默认配置文件中。我们可以将配置文件重命名为application-default.yml会起同样的作用。

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

为了激活特定的配置文件

对于非弹簧引导项目,这里有一个非常好的答案弹簧活动配置文件

对于春季启动项目,您可以

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

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

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

    export SPRING_PROFILES_ACTIVE=qa

    java -jar myApp.jar

相关内容

  • 没有找到相关文章

最新更新