当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot jar中基于环境加载属性

帅博简
2023-03-14

我正在spring boot中构建一个可重用的库,它可以调用Rest API并进行一些验证。这将构建为JAR,目标是通过添加pom将此库用作maven依赖项。其他spring boot项目中的xml。

问题是库如何知道要加载哪些环境属性。因为它没有在任何服务器上运行。例如:调用应用程序将包含为依赖项,并部署在dit环境中。我希望库能够获取dit属性,如url、令牌等,以及关于如何实现这一点的任何建议。

共有2个答案

燕翔飞
2023-03-14

如果您想创建可重用库,您应该避免从任何特定位置读取配置。虽然此规则可能有一些例外,但通常从特定位置(例如环境变量或属性文件)读取配置会限制库的可重用性和可测试性。

我认为最好的方法是将代码一分为二。库本身不依赖于Spring。您可以使用构造函数注入、构建器或其他合适的模式轻松配置它。例如,如果要设置要连接的URL,可以使用构造函数:

public class ExampleClient {

    private final String url;

    public ExampleClient(String url) {
        this.url = url;
    }

    // the rest of the class
}

由于您的库不依赖于Spring或任何环境,因此非常容易测试。并且增加了可重用性,因为它不会对它将运行的环境做出任何假设。即使您计划将其用于单个环境,总有一天环境或需求可能会发生变化。

然后,您可以创建自己的自动配置,该配置将创建example pleClient实例并使用适当的URL对其进行配置。它将如何获取URL取决于您的特定要求,但在大多数情况下最好使用外部化配置。它会给你很大的灵活性。

陈斌蔚
2023-03-14

如果您使用application.properties,您可以像这样扩展您的库的文件。或者使用@Property tySource声明您的库文件。

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

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

  • 问题内容: 如何创建项目架构以支持多个环境。借助于spring的帮助,每个环境都将具有来自不同属性文件(例如,(dev-propertfile,test- propertyFil,Production-propertyfile))的不同数据源。 问题答案: 我将逐步介绍Spring引导应用程序的过程。 在 /src/main/resources/application.properties 内部,

  • 目标是使用包含密钥的环境运行Spring启动应用程序 或者,更抽象的定义:虽然应该首选仅按文件进行配置(更快、更容易、更宽容、…),但有时您会发现需要基于非静态文件的配置的用例。 Spring 3.1 引入了它实际上是一个属性解析器(扩展),并且基于对象。这样的源是属性(文件或对象)、映射或其他内容的包装器/适配器。看起来这真的是如何得到的方式。 然而,这不能在@Configuration类中完成

  • 我想根据配置的属性配置另一个追加器。我们希望为JSON日志或文本日志创建一个appender,这将由属性文件或环境变量决定。 所以我在考虑最好的方法来做到这一点。 使用筛选器将日志打印到文件的1中(可以是JSON还是Txt)。但这将创建两个追加器。我只想创建1个appender。 在logback XML文件中使用“If Else”块。如果在追加器周围使用if else的话,记录器看起来很邋遢,而

  • 如何创建支持多种环境的项目架构?在Spring的帮助下,每个环境将具有来自不同属性文件(dev-propertfile,test-propertfil,propertyfile)的不同数据源