如何application.properties在spring-boot中添加多个www.example.com文件?

ao218c7q  于 2022-12-23  发布在  Spring
关注(0)|答案(6)|浏览(136)

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

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

这就是当前的情况,很明显模块support_module中的属性文件没有被读取,导致NoSuchBeanDefinitionException,而如果我把内容放在另一个属性文件中,一切都很好。

u1ehiz5o

u1ehiz5o1#

您尝试执行的操作在使用Maven或Gradle时无法执行,原因是创建工件(由于您使用的是Sping Boot ,因此很可能是jar)时,根目录中只有一个application.properties文件。
我建议您更改支持模块上的属性文件的名称,然后配置Sping Boot 来查找该文件(查看thisthis指针答案),或者为您的构建工具使用某种类型的合并任务(可能类似于this

t30tvxxf

t30tvxxf2#

这个问题正是@geoand所描述的。Spring boot加载顶级application.properties,并忽略其他jar中任何同名的属性文件。
但我没有找到任何具体的实现如何解决这个问题,所以这里是为那些谁想要知道的实现。
请考虑以下项目配置:

+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

现在,为了正确加载每个子模块的属性,我们需要在每个模块的配置上添加@PropertySource注解,即ModuleAAConfig.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 {}
    • 奖金:**

如果您想加载配置文件特定的属性,您可以通过使用Spring变量来完成,例如:

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

efzxgjgh3#

Sping Boot 按照以下顺序读取属性文件。(摘自Spring Boot in Action)
1.在外部,位于运行应用程序的目录的/config子目录中
1.在外部,位于运行应用程序的目录中
1.在内部,位于名为“config”的包中
1.在内部,位于类路径的根目录
该列表按优先级排序(在列表中较高位置定义的特性将覆盖在较低位置定义的特性)。
因此,将application.properties放在config子目录中将给予它更高的优先级。在以下配置中,来自module_aapplication.properties将优先。您可以在application.properties中添加公共默认值,并通过将配置文件放在config/application.properties中在单个模块中覆盖它们。

+common_module
  +src
    +main
      +java
      +resources/application.properties
+module_a
  +src
    +main
      +java
        +my/package/Application.java
      +resources/config/application.properties
xiozqbni

xiozqbni4#

您还可以使用spring.config.location环境属性(逗号分隔的目录位置或文件路径列表)引用显式位置

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

有关click的更多信息,请单击此处

mw3dktmi

mw3dktmi5#

作为一个选项,您可以更正确地设计您的模块,并实现EnvironmentPostProcessor来自动加载它们的个人属性文件。
请看我的详细回答:如何application.properties在Spring中继承www.example.com?

5jdjgkvh

5jdjgkvh6#

在同一工件中不可能有多个application.properties,但可以有

application.properties 
 application.yml

在相同的工件中。这可能有助于分离关注点。

相关问题