我们说我有5个Spring Boot项目。所有这些都有一个Maven依赖于Spring Boot项目No 6和一些共享/公共类。 5个独立项目在每个application.properties上分配了许多公共属性,我想抽象并将它们移动到公共项目中。整体看起来像这样:
Project 1 (app.properties)
Common Project (app-common.properties) <--- Project 2 (app.properties)
Project 3 (app.properties)...
目前的问题是app-common.properties位于project1.jar / lib / common-project.jar中,而app-common.properties显然不会在启动时加载。
有没有办法从依赖项中扩展它?
CommonProject Main class如下所示:
@SpringBootApplication
public class CommonApplication extends SpringBootServletInitializer {
protected static void run(SpringApplication application, String[] args) {
application.run(args);
}
}
Project1主类看起来像这样:
public class Project1 extends CommonApplication {
public static void main(String[] args) {
run(new SpringApplication(Project1.class), args);
}
}
答案 0 :(得分:13)
使用PropertySource注释并为您的应用提供两个来源:
@PropertySources({
@PropertySource("classpath:app-common.properties"),
@PropertySource("classpath:app.properties")
})
可以在那里找到更多细节 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
答案 1 :(得分:3)
目前春季启动并不提供继承属性。
Spring引导应用程序支持多个属性源,但xxx.properties
的约定(读取:内置逻辑)是在有多个属性文件具有相同文件名的情况下解析最后xxx.properties
。
有很多解决方案。
一种可能的解决方案是
application-customprofile.properties
spring.profiles.include=customprofile
中设置了application[-{profile}].properties
的从属关系(注意:如果在application.properties
中设置,则适用于所有个人资料)另一种可能的解决方案是为属性使用唯一的自定义文件名。
application.properties
,请使用common.properties