Spring Boot App не получает application.properties из зависимой банки - PullRequest
1 голос
/ 01 ноября 2019

У меня есть два приложения весенней загрузки. Первая - это библиотека API, которая помещается во вторую (веб-приложение) как зависимый файл.

Во-первых, это библиотека API, которая содержит функции для создания «дел» в решении IBM. Это jar автономного типа, который имеет класс обслуживания, который предоставляет такие методы, как getCaseXMLForDocId (String docId) или createCaseForAgreementNumber (String AgreementNumber)

Первая библиотека с именем CaseInvocationAPI имеет файл application.properties, который имеет несколько свойств. Например:

caseinvocation.query.fetchNonProcessedCaseXml=SELECT Id, CaptureSource, AgreementNumber, CaptureSourceID FROM CaseInvocation WHERE ProcessIndicator IN (0, 2)

В классе обслуживания есть метод, который делает запрос, извлекая эту строку запроса из переменной-члена, которая заполняется свойством из файла application.properties:

  @Value("${caseinvocation.query.fetchNonProcessedCaseXml}")
  private String selectNonProcessedQueryString;

Второе приложение SpringBoot - это веб-приложение с контроллерами REST. Эти контроллеры предоставляют конечные точки, которые вызывают библиотеку CaseInvocationAPI, в частности класс CaseInvocationService.

Проблема, с которой я столкнулся, заключается в том, что при запуске WEBAPPLICATION в SpringBoot конфигурация контекста взрывается со следующей ошибкой:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'caseinvocation.query.fetchNonProcessedCaseXml' in string value "${caseinvocation.query.fetchNonProcessedCaseXml}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:219)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:193)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:813)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1039)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    ... 45 common frames omitted

Похоже, что при запуске WebApp, когда онпытаясь собрать классы из зависимого фляги, эти свойства не найдены.

Я не думал, что мне нужно было копировать каждое свойство из зависимого файла jar application.properties в файл application.properties в проекте Webapp.

Почему проект WebApp (CaseInvocationWebApp) не извлекает файл application.properties из зависимого файла JAR (CaseInvocationAPI)?

Я проверил скомпилированный файл jar (CaseInvocationAPI) и файл application.properties находится там в jar.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Существует 3 способа (о которых я могу подумать), к которым можно подойти:

  1. Зависимость, библиотека API, не должна иметь application.properties, поскольку это библиотека, а неисполняемое загрузочное приложение Spring само по себе. Вы определяете свойства только в application.properties вашего веб-приложения, даже для библиотеки API. Но здесь предполагается, что у вас есть доступ к jar библиотеки API.

  2. Вы можете переопределить все свойства в application.properties веб-приложения, по существу переопределяя их.

  3. Явно сконфигурируйте загрузочное приложение Spring для использования обоих файлов application.properties, каждый из которых имеет свой набор свойств. Предостережение: имена файлов должны отличаться, так как расположение конфигурации является classpath для обоих.

@SpringBootApplication
public class WebApplication {

  public static void main(String[] args) {
    SpringApplication app = new SpringApplicationBuilder(WebApplication.class)
        .properties("spring.config.location=classpath:api-application.properties,classpath:application.properties")
    app.run(args);
  }
}
1 голос
/ 01 ноября 2019

Похоже, что проблема была связана с тем, что и у дочернего jar, и у webapp есть файлы application.properties. Я не знал, что родительское приложение WebApp application.properties перезаписывает другие (на самом деле игнорируя все остальные).

Отдельное спасибо Пачоалу за его ответ.

Подробнее об ответе вы можете прочитать здесь: Добавление нескольких файлов application.properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...