Java Spring应用程序的库模块如何向应用程序添加附加配置;s`application.yml`?
我有一个用Maven构建的Spring引导应用程序,它使用JDBC。Java Spring应用程序的库模块如何向应用程序添加附加配置;s`application.yml`?,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个用Maven构建的Spring引导应用程序,它使用JDBC。application.yml文件 spring: application: (stuff) datasource: url: jdbc:informix-sqli://...... driver-class-name: com.informix.jdbc.IfxDriver 我想将特定于JDBC的部分移动到库中,因此现在app/src/main/resources/application.ym
application.yml
文件
spring:
application:
(stuff)
datasource:
url: jdbc:informix-sqli://......
driver-class-name: com.informix.jdbc.IfxDriver
我想将特定于JDBC的部分移动到库中,因此现在app/src/main/resources/application.yml
只包含
spring:
application:
(stuff)
而数据源
配置参数需要存在于库存储库中。我尝试使用创建lib/src/main/resources/application.yml
spring:
datasource:
url: jdbc:informix-sqli://......
driver-class-name: com.informix.jdbc.IfxDriver
希望这两个yml文件都能在Spring加载时被拾取和合并。显然不是
库和应用程序构建得很好,但是当我运行它时
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
如何将库中的配置合并到应用程序中的
应用程序.yml
配置中?您可以使用@PropertySource。您必须实现自己的PropertySourceFactory
如果你的道具是yaml格式的。然后在PropertySource中定义它
@PropertySource(value = ResourceUtils.CLASSPATH_URL_PREFIX
+ "application.yml", factory = Factory.class)
我总是发现,从子模块到spring引导的外部配置的“合并”在最坏的情况下是有问题的,在最好的情况下是令人困惑的。现在,我使用两种方法之一组织所有外部配置。但首先,有多种方法可以指定您应该注意的外部配置:
- 启动spring boot应用程序时,我使用配置文件并在运行时指定多个配置文件。i、 e.多个配置文件,如“共享公共、共享jdbc、部署产品”,将从子模块中加载“应用程序共享jdbc.yml”
- 我创建了一个模块,该模块只包含所有相关模块使用的配置文件,通常具有用于不同配置场景的多个配置文件。所有其他模块(可执行文件和库)都依赖于此共享配置模块
在AFAICT中,spring boot的外部配置处理设置不适合独立的子模块配置。它更倾向于认为配置属于运行时/可执行模块,而不是库。a)我将
@PropertySource
放在库源代码的哪里?b) 现有的应用程序源代码或pom中没有@PropertySource
,那么有什么规则呢?c) 现有配置存在于yml中,如果应用程序已经在使用yml,为什么我需要使用@PropertySourceFactory
?只需在库中创建一个类,并使用@configuration和@PropertySource
对其进行注释。您不需要@PropertySourceFactory
。看看这个链接使用的@PropertySourceFactory
,你说我不需要它是什么意思?你真的读过吗?您不需要注释@PropertySourceFactory
您需要的是接口PropertySourceFactory
的实现,您需要实现该接口,就像我给您的链接中的接口一样。Spring不支持使用@PropertySource
读取YAML文件,这就是为什么@PropertySource
中有工厂
属性的原因。尝试将YAML道具转换为普通属性文件,以便理解我的意思。再试一次&