如果我创建一个公共库,其中application.properties
定义了常见配置。像:
spring.main.banner-mode=off
如何将这些属性继承到我包含这些公共库的另一个项目中?
的Maven:
<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-commons
继承到my-core
?
答案 0 :(得分:4)
解决方案是使用其他名称包含共享属性,此处为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 {
}
这样可以加载commons / shared配置,但是可以在主app的application.properties中覆盖。
它不适用于spring.main.banner-mode
属性(不知道为什么),但是对于所有其他属性,它运行良好。
答案 1 :(得分:0)
你可以尝试使用Spring。
您可以在提及的公共模块中定义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"/>
它应该导入给出classpath目录中的所有配置文件。
另外,您应该知道在类路径中不能有两个相同的文件。你会发生冲突。
例如,这种情况会产生冲突:
项目A(取决于项目B):
src/main/resources/application.properties
项目B:
src/main/resources/application.properties
您必须重命名application.properties
文件或将其放在不同的目录中。