如何在弹簧启动中添加多个应用程序.属性文件?

2022-08-31 20:40:18

我有一个Spring启动应用程序,分为几个模块。主模块运行应用程序,并在资源文件夹中有一个文件。我想知道我是否可以在子模块中添加另一个属性文件来分隔属于该模块的属性以及如何使其工作(因为它不是)。application.properties

+main_module
  +src
    +main
      +java
        +my/package/Application.java
        +resources/application.properties
+support_module
  +src
    +main
      +java
        +resources/application.properties

所以,这就是目前的情况。显然,模块中的属性文件没有被读取,导致,而如果我将内容放在其他属性文件中,一切正常。support_moduleNoSuchBeanDefinitionException


答案 1

在使用 Maven 或 Gradle 时,您尝试执行的操作将不起作用。原因是,当创建工件(很可能是因为你使用的是Spring Boot)时,根目录中只有一个文件。application.properties

我建议您更改支持模块上属性文件的名称,然后配置Spring Boot以查找该文件(查看答案以获取指针),或者为您的构建工具使用某种合并任务(也许像这样


答案 2

问题正是@geoand所描述的。Spring boot 加载顶级,并忽略任何属性文件,其确切名称位于其他 jar 中。application.properties

但是我没有找到任何关于如何解决这个问题的具体实现,所以这里是为那些想知道实现的人准备的。

请考虑以下项目配置:

+main_module
  +src
    +main
      +java
        +my/package/Application.java
      +resources/application.properties
+module_aa
  +src
    +main
      +java
        +my/package/config/ModuleAAConfig.java
      +resources/module_aa.properties
+module_bb
  +src
    +main
      +java
        +my/package/config/ModuleBBConfig.java
      +resources/module_bb.properties

现在,要正确加载每个子模块的属性,我们需要在每个模块的配置上添加注释,即。@PropertySourceModuleAAConfig.java, ModuleBBConfig.java

例:

ModuleAAConfig.java

package my.package.config;

@Configuration
@PropertySource(
    ignoreResourceNotFound = false,
    value = "classpath:module_aa.properties")
public class ModuleAAConfig {}

ModuleBBConfig.java

package my.package.config;

@Configuration
@PropertySource(
    ignoreResourceNotFound = false,
    value = "classpath:module_bb.properties")
public class ModuleBBConfig {}

奖金:

如果要加载配置文件特定的属性,则可以通过使用弹簧变量来执行此操作,例如

@PropertySource("classpath:module_aa-${spring.profiles.active}.properties")

推荐