вложенные библиотеки с ссылками на spring boot — настройка и разрешение файлов свойств

#java #spring #spring-boot #maven

Вопрос:

У меня есть своеобразный сценарий, с которым мне нужно разобраться.

У меня есть приложение Spring Boot (проект A), которое ссылается на внешнюю библиотеку JAR (проект B), в которой также есть несколько ссылок на Spring (например, Spring JPA).

Более того, у меня есть третий проект C, упакованный как WAR, с собственными ссылками на Spring Boot — изначально он был разработан для запуска в качестве отдельного приложения, но позже я решил использовать некоторые из его классов в первом приложении.

Итак, чтобы привести пример — @Контроллер в проекте A ссылается (@Автоматически подключенный) на @Сервис в проекте B, который ссылается (@Автоматически подключенный) на @Сервис в проекте C.

Мне удалось найти способ создать артефакт «классы» военного проекта, а затем ссылаться на него из внешней библиотеки второй банки, используя классификатор «классы».

Кажется, все работает нормально, за исключением того факта, что во внешнем проекте ВОЙНЫ есть некоторые аннотированные классы @PropertySource, которые перестают разрешаться:

 @Service
@PropertySource("classpath:custom-${spring.profiles.active}.properties")
public class BlahBlah {
    @Value("${blahblah.username}")
    String username;
}
 

Проект C имеет файлы пользовательских локальных свойств и пользовательских prod.свойств в папке src/main/resources, и свойства разрешаются правильно, когда проект C запускается как отдельное автономное приложение.

Хорошо, после проб и ошибок мне показалось логичным, что я должен скопировать свои пользовательские файлы*.properties из 3-го проекта в 1 — й (возможно, автоматизировать это во время сборки) — поскольку, когда я использую классы 3-го проекта в 1-м проекте, путь к классам: «меняет свое значение и теперь указывает на корневой каталог 1-го проекта JAR. Но это все равно не сработало бы.

К счастью, все, наконец, сработало, когда я также сделал аннотацию @Service в проекте B с той же аннотацией @PropertySource, что и в проекте C. Является ли это правильным подходом? Есть какие-нибудь мысли? Например. возможно ли, чтобы проект C работал так, как ожидалось, с разрешением @Value, без копирования пользовательских*.свойств между проектами?

Спасибо!