#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, без копирования пользовательских*.свойств между проектами?
Спасибо!