如何在春季继承应用程序.属性?

2022-09-02 01:50:02

如果我创建一个具有定义通用配置的共享资源库。喜欢:application.properties

spring.main.banner-mode=off

如何将这些属性继承到另一个包含这些共享资源库的项目中?

专家:

<project ...>
    <groupId>de.mydomain</groupId>
    <artifactId>my-core</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <!-- this one holds the common application.properties -->
            <groupId>my.domain</groupId>
            <artifactId>my-commons</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

如何将配置从 继承到 ?my-commonsmy-core


答案 1

解决方案是在此处包含使用不同名称的共享属性application-shared.properties

在共享库中:

@SpringBootApplication
@PropertySource(ResourceUtils.CLASSPATH_URL_PREFIX + "application-shared.properties") //can be overridden by application.properties
public class SharedAutoConfiguration {
}

在主应用程序中:

@SpringBootApplication
@Import(SharedAutoConfiguration.class)
public class MainAppConfiguration extends SpringBootServletInitializer {

}

通过这种方式,共享资源/共享配置被加载,但可以在主应用程序的 application.properties 中被覆盖。

它不适用于酒店(不知道为什么),但与所有其他属性一起工作得很好。spring.main.banner-mode


答案 2

你可以用春天试试这个。

您可以像您提到的在公共模块中定义您的模块。它将存在于依赖于它的其他项目的类路径中。src/main/resources/application.properties

然后使用注释,在其他依赖于公共模块的项目中:@PropertySource

@Configuration
@PropertySource("classpath*:META-INF/spring/properties/*.properties")
public class Config {
  ...
}

或者使用 XML 配置:

<context:property-placeholder location="classpath*:META-INF/spring/properties/*.properties"/>

它应该导入 give 类路径目录中的所有配置文件。

此外,您应该知道,类路径中不能有两个相同的文件。你会遇到冲突。

例如,这种情况会产生冲突

项目 A(取决于项目 B):

  • src/main/resources/application.properties

项目 B :

  • src/main/resources/application.properties

您将必须重命名文件或将其放在其他目录中。application.properties


推荐