Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot多模块gradle项目中依赖模块的配置属性_Java_Spring Boot_Gradle_Spring Boot Configuration - Fatal编程技术网

Java Spring Boot多模块gradle项目中依赖模块的配置属性

Java Spring Boot多模块gradle项目中依赖模块的配置属性,java,spring-boot,gradle,spring-boot-configuration,Java,Spring Boot,Gradle,Spring Boot Configuration,我已经四处搜寻了几个小时,搔了搔头,但我无法让它工作 我有一个Gradle的多模块项目,目前有两个模块:BFF(使用Spring Boot)和一个从数据库获取数据的模块(灵感来自于)。结构看起来像这样: ├── bff | ├── build.gradle.kts | ├── src | └── main | ├── java | | └── some.package.bff.controller | |

我已经四处搜寻了几个小时,搔了搔头,但我无法让它工作

我有一个Gradle的多模块项目,目前有两个模块:BFF(使用Spring Boot)和一个从数据库获取数据的模块(灵感来自于)。结构看起来像这样:

├── bff
|  ├── build.gradle.kts
|  ├── src
|      └── main
|           ├── java
|           |    └── some.package.bff.controller
|           |        └── CustomerController
|           └── resources
|               └── application.yaml
├── customer-service
|  ├── build.gradle.kts
|  ├── src
|      └── main
|           ├── java
|           |     ├── some.package.customer.config
|           |     |    ├── CustomerServiceConfiguration
|           |     |    └── CustomerServiceConfigurationProperties
|           |     └── ...
|           └── resources
|               └── customer-service-properties.yaml
├── build.gradle.kts
└── settings.gradle.kts
CustomerServiceConfiguration属性
是一个简单的
ConfigurationProperties
类。
CustomerServiceConfiguration
类是一种将模块“导入”到BFF的Spring上下文的方法,其灵感来自:

将由
CustomerServiceConfiguration属性映射的属性添加到BFF的
应用程序中。yaml
按预期工作,用于配置客户服务模块。不起作用的是为
客户服务
模块添加不应被
bff
修改的配置属性,例如休眠设置。我打算使用
客户服务属性.yaml
来执行此操作。当我试图用所讨论的行运行应用程序时,Spring抱怨在类路径上找不到该文件。果然,当查看生成的jar时,它不在那里。将其添加到
bff
的资源中是可行的,但这显然不是我想要的

我是否需要找到将
客户服务属性.yaml
文件添加到类路径的方法?我是否应该不使用类路径,而是使用其他东西来实现这一点?我只是想做一些我不该做的事吗?有没有别的办法

注:我对格拉德尔还是一个新手,如果这有关系的话


如果需要添加或指定其他内容,请告诉我。任何帮助或指点都将不胜感激。谢谢

不能使用
@PropertySource
读取yamo文件,因为它只支持属性文件。
@EnableConfigurationProperties
也不能处理从
@PropertySource
加载的属性文件。也就是说,您的
customer service
jar应该构建一个包含yaml文件的jar,这个jar应该是类路径的一部分,因此文件将被加载。看起来你没有(正确地)构建那个jar,或者在你的
bff
项目中包含不同的内容。实际上我试过了,但也没有成功。此外,将yaml文件添加到
bff
中确实有效。我正在编辑我的评论,请重新阅读。此外,也不能保证属性不会在
应用程序.yaml
文件中被重写。它们都将加载到相同的
环境中
(最终)并从那里解析。因此,认为您可以提供一个不能被覆盖的配置是不可能的。嗯,
客户服务属性.yaml
应该包含任何不应该被
bff
修改的属性(因此,
CustomerServiceConfiguration属性映射的属性都不应该在其中). 无论如何,这是否意味着您不能将
@PropertySource
@EnableConfigurationProperties
结合使用,而不管它们的内容如何?另外,在检查
客户服务
模块的内置jar时,
客户服务属性.yaml
也在其中。它不在bff的
bff
中,但这可能是有意义的。那么,我怎样才能把它放到类路径上呢?ThanksAs声明您服务的jar应该包含您的bff项目也应该使用的所有jar,因此它应该是可用的。如果您做了其他事情来创建不包含它的服务jar(或提供不同的依赖项),那么您的构建就被破坏了(可能太复杂了?)。
@Configuration
@EnableConfigurationProperties(CustomerServiceConfigurationProperties.class)
@PropertySource("classpath:customer-service-properties.yaml") //This fails
@ComponentScan(basePackages = {
    "some.package.customer"
})
public class CustomerServiceConfiguration {
    private static final Logger log = LoggerFactory.getLogger(CustomerServiceConfiguration.class);
    private final CustomerServiceConfigurationProperties configurationProperties;

    public CustomerServiceConfiguration(final CustomerServiceConfigurationProperties configurationProperties) {
        this.configurationProperties = configurationProperties;
    }

    @Bean
   SomeBean someBean() {
       ...
    }
}