Java Spring Boot多模块gradle项目中依赖模块的配置属性
我已经四处搜寻了几个小时,搔了搔头,但我无法让它工作 我有一个Gradle的多模块项目,目前有两个模块:BFF(使用Spring Boot)和一个从数据库获取数据的模块(灵感来自于)。结构看起来像这样: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 | |
├── 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() {
...
}
}