当前位置: 首页 > 面试题库 >

加载特定于环境的属性以与PropertyPlaceholderConfigurer一起使用吗?

卢知
2023-03-14
问题内容

这似乎是一个很常见的问题,但是我没有找到关于最佳方法的任何共识,因此我在这里提出了这个问题。

我正在使用Spring
Batch和Spring开发命令行Java应用程序。我正在使用属性文件以及PropertyPlaceholderConfigurer,但是我不确定为多个环境(开发,测试等)处理属性文件的最佳方法。我的Google搜索只提供了一种编程方式来加载属性(即,在Java代码本身中),这对于我正在做的事情不起作用。

我考虑过的一种方法就是简单地将每个环境的属性文件放在服务器上,并通过命令行参数将文件目录添加到类路径中,但是我一直在使用该方法加载文件时遇到麻烦。

我正在考虑的另一种方法是只在jar中包含所有属性文件,并在运行时使用系统属性或命令行参数填写属性文件的名称,如下所示:

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:job.properties.${env}</value>
        </list>
    </property>
</bean>

我倾向于后一种解决方案,但我也希望看看是否有更好的方法被我忽略了。

我还应该提到,我必须在运行时而不是在构建中进行替换。我受限制使用的过程需要一个构建,该构建将通过环境升级到生产环境,因此我无法使用替代ala
Maven或Ant。


问题答案:

我同意-它不应是构建时配置,因为您要将完全相同的有效负载部署到各种上下文中。

PropertyPlaceHolderConfigurer的Locations属性可以使用各种类型的资源。也可以是文件系统资源或URL?因此,您可以将配置文件的位置设置为本地服务器上的文件,然后每当它运行时,它将以该服务器上的配置文件指定的模式运行。如果您具有用于特定运行模式的特定服务器,则可以正常运行。

尽管似乎您想在同一台服务器上以不同的模式运行同一应用程序,但在两行之间进行读取。在这种情况下,我建议通过命令行参数传递配置文件的位置。将此值传递到PropertyPlaceHolderConfigurer会有些棘手,但并非不可能。



 类似资料:
  • 我试图使用Micronaut 3加载特定于环境的属性。我有两个文件和 application.yml application-dev.yml 正在尝试访问URL 在teamConfiguration变量中,我可以看到文件不是来自文件。 正如我所知,默认情况下Micronaut只查找应用程序。yml。然后,对于测试、开发和产品,它加载应用程序。yml并用应用程序测试中定义的值覆盖其中的任何值。yml

  • 我正在一个spring启动的应用程序,我需要你的协助在下面的场景。 我有每个环境的属性文件,比如application-dev.properties,application-prod.properties等。我的应用程序可以通过使用spring@profile注释来加载特定于环境的属性文件。 请帮帮忙。

  • 问题内容: 我正在使用node.js + express.js + everyauth.js。我已经将所有我的Everyauth逻辑移到了模块文件中 在其中,我使用密钥/秘密组合加载我的oAuth配置文件: 这些代码对于不同的环境是不同的-开发/登台/生产,因为回调是针对不同的URL的。 曲 如何在环境配置中设置它们以过滤所有模块,或者可以将路径直接传递到模块中? 在环境中设置: 传递 ?希望有道

  • 我在web应用程序中工作。我正在使用spring分析加载基于环境的属性。下面是样品 在web.xml中,我们可以给出配置文件 现在,我的查询是针对我需要创建一个单独的Java类的每个环境。 问题:是否可能只有一个类,比如提供配置文件名称作为某个绑定参数,比如。 同时,让我知道是否有其他更好的选择,以实现同样的。

  • 我正在spring boot中构建一个可重用的库,它可以调用Rest API并进行一些验证。这将构建为JAR,目标是通过添加pom将此库用作maven依赖项。其他spring boot项目中的xml。 问题是库如何知道要加载哪些环境属性。因为它没有在任何服务器上运行。例如:调用应用程序将包含为依赖项,并部署在dit环境中。我希望库能够获取dit属性,如url、令牌等,以及关于如何实现这一点的任何建

  • 问题内容: 在我的应用程序上下文中,我定义了属性文件: 我想获取JSP页面上该文件中定义的属性的值。有没有办法做到这一点 问题答案: 只能解析Spring配置中的占位符(XML或注释)。在Spring应用程序中使用bean 是非常普遍的。您可以通过这种方式从视图中访问它(假设您正在使用): 然后,在您的JSP中,您可以使用或。