Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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应用程序的库模块如何向应用程序添加附加配置;s`application.yml`?_Java_Spring_Spring Boot - Fatal编程技术网

Java Spring应用程序的库模块如何向应用程序添加附加配置;s`application.yml`?

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

我有一个用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.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道具转换为普通属性文件,以便理解我的意思。再试一次&