Spring应用程序的库模块如何向应用程序的application.yml中添加其他配置?

时间:2020-04-29 16:38:06

标签: java spring spring-boot

我有一个使用Maven构建的Spring Boot应用程序,该应用程序使用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)

datasource配置参数必须存在于库存储库中。我尝试使用{p>创建lib/src/main/resources/application.yml

spring:
  datasource:
    url: jdbc:informix-sqli://......
    driver-class-name: com.informix.jdbc.IfxDriver

希望当Spring加载时,两个yml文件都将被拾取并合并。显然不是。

库和应用程序构建良好,但是当我运行时

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

如何获取库中的配置以合并到应用程序中的application.yml配置中?

2 个答案:

答案 0 :(得分:0)

您可以使用@PropertySource。您必须实现自己的PropertySourceFactory 如果您的道具是Yaml格式。然后在PropertySource中定义它

expressions = re.findall(r"[abcd]\d+|ab\d+|abcd\d+",line)
print(expressions)

答案 1 :(得分:0)

我一直发现,使用spring-boot将子模块的外部配置“合并”到最坏的时候是有问题的,充其量是令人困惑的。现在,我使用两种方法之一来组织所有外部配置。但是首先,有多种方法可以指定外部配置,您应该注意以下几点:

我以前会指定多个位置,并且可以使用。但是,我现在通常使用两种方法之一来避免混淆:

  • 启动Spring Boot应用程序时,我使用配置文件并在运行时指定多个配置文件。即,多个配置文件(例如“ shared-common,shared-jdbc,deploy-prod”)将从子模块中加载“ application-shared-jdbc.yml”。

  • 我创建一个仅包含配置文件的模块,所有相关模块都会使用该配置文件,并且通常具有针对不同配置方案的多个配置文件。所有其他模块(可执行文件和库文件)都依赖于此共享配置模块。

弹簧引导的外部配置处理AFAICT并非理想地设置为具有独立子模块配置。它更倾向于配置属于运行时/可执行模块而不是库的概念。