Spring Boot 2:如何将不同模块的每个 application.yml 文件加载到给定的 Web 或批处理运行器中

2024-04-30

我创建了一个 Spring Boot 应用程序,我想知道是否可以加载不同模块的 upmteens application.yml 文件。

我有这样的结构:

myProject
|__ moduleCommons
|   |__ application.yml
|__ moduleWeb
|   |__ application.yml
|   |__ MyProjectWebApplication.java
|__ moduleBatch
    |__ application.yml
    |__ MyProjectBatchApplication.java

为了启动 Web 模块的 Spring Boot 应用程序,我运行 MyProjectWebApplication.java。

为了启动批处理模块的 Spring Batch,我运行 MyProjectBatchApplication.java。

它们都需要一些公共属性,这些属性在公共模块的 application.yml 文件中设置(如数据库配置、上传文件的目录路径等)。 其他一些属性是特定于每个模块的,因此在 Web 模块(如 servlet 上下文路径、jwt 设置)或批处理模块(如邮件程序设置)的 application.yml 文件中设置。

例如,我想在其中加载 Web 和 commons application.yml 文件的 MyProjectWebApplication 类:

package com.myProject.web;

@SpringBootApplication(
        scanBasePackages = {"com.myProject.web", "com.myProject.commons"},
        exclude = {DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class}
)
@EnableJpaRepositories(
        basePackages = "com.myProject.commons.datasources.defaut.repository",
        repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class
)
@ContextConfiguration(classes = {MyProjectDbConfig.class})
public class MyProjectWebApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MyProjectWebApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyProjectWebApplication.class, args);
    }
}

但似乎我只加载具有此配置的 Web 模块 application.yml 文件...

帮助 ! :)


您可以通过在公共模块中设置 application.yml 和在依赖模块中设置 /config/application.yml 来实现。如果您需要第三个后备测试,您可以在每个 @Test 上使用 /config/application-test.yml 和 @ActiveProfiles("test") 。

这样你的设置将是:测试属性 - >主要属性 - >公共属性

这适用于从头开始构建的测试用例,但我不确定在不同环境中运行时在配置下具有主要属性的后果(https://github.com/spring-projects/spring-boot/issues/9128 https://github.com/spring-projects/spring-boot/issues/9128,即是否保证 commons application.yml 优先于其他潜在依赖项)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 2:如何将不同模块的每个 application.yml 文件加载到给定的 Web 或批处理运行器中 的相关文章

随机推荐