【问题标题】:How to load properties based on environment in spring boot jar如何在spring boot jar中根据环境加载属性
【发布时间】:2021-12-15 04:02:04
【问题描述】:

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

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

【问题讨论】:

  • 你使用的是 .yaml 还是 .properties 配置文件?
  • 你知道profiles的存在吗?

标签: java spring spring-boot jar


【解决方案1】:

如果您使用application.properties,您可以通过您的库文件来扩展您的应用程序文件,例如so。或者使用@PropertySource 声明您的库文件。

【讨论】:

  • @Value 在现代春天非常不受欢迎
  • @Eugene 真的吗?你能给我一些链接吗,这解释了为什么?
  • 例如看here。宽松的绑定至少是原因之一
  • @Eugene 谢谢!之前没有考虑过,并从我的答案中删除了该选项
【解决方案2】:

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

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

public class ExampleClient {

    private final String url;

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

    // the rest of the class
}

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

然后您可以创建your own auto-configuration,它将创建ExampleClient 实例并使用适当的URL 对其进行配置。获取 URL 的方式取决于您的具体要求,但在大多数情况下最好使用Externalized Configuration。它会给你很大的灵活性。

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2023-02-22
    • 1970-01-01
    • 2014-12-21
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多