Как модуль библиотеки приложения Spring может добавить дополнительную конфигурацию в приложение `application.yml`? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение Spring Boot, созданное с Maven, которое использует JDB C. Файл application.yml содержит

spring:
  application:
    (stuff)
  datasource:
    url: jdbc:informix-sqli://......
    driver-class-name: com.informix.jdbc.IfxDriver

Я хочу переместить детали JDB C, специфицированные c, в библиотеку, поэтому теперь app/src/main/resources/application.yml содержит только

spring:
  application:
    (stuff)

и параметры конфигурации datasource должны находиться в хранилище библиотеки. Я попытался создать 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.

Как я могу получить конфигурацию библиотеки, которая будет объединена с конфигурацией application.yml в приложение?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я всегда находил, что «объединение» внешней конфигурации из подмодулей с подпружиненной загрузкой в ​​худшем случае проблематично c, в лучшем случае сбивает с толку. Теперь я организую все внешние настройки, используя один из двух подходов. Но сначала есть несколько способов указать внешнюю конфигурацию, о которой вам следует знать:

Раньше я бы указывал несколько мест, и это вроде работало. Но теперь я обычно использую один из двух подходов, чтобы избежать путаницы:

  • Я использую профили и задаю несколько профилей во время выполнения при запуске приложения весенней загрузки. т.е. несколько профилей, таких как «shared-common, shared-jdb c, deploy-prod», которые будут загружать «application-shared-jdb c .yml» из подмодуля.

или

  • Я создаю модуль, который содержит только файлы конфигурации, которые используются всеми связанными модулями, часто с несколькими профилями для различных сценариев конфигурации ios. Все остальные модули (исполняемые файлы и библиотеки) зависят от этого общего модуля конфигурации.

AFAICT, обработка внешней конфигурации Spring-boot не настроена идеально для автономной конфигурации подмодуля. Он больше ориентирован на то, что конфигурация принадлежит исполняемым / исполняемым модулям, а не библиотекам.

0 голосов
/ 29 апреля 2020

вы можете использовать @PropertySource. Вы должны реализовать свой собственный PropertySourceFactory, если ваши реквизиты в формате yaml. затем определите его в PropertySource

@PropertySource(value = ResourceUtils.CLASSPATH_URL_PREFIX
    + "application.yml", factory = Factory.class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...