#spring-boot #maven #executable-jar
#весенняя загрузка #maven #исполняемый файл-jar
Вопрос:
Я экспериментирую с многомодульными проектами spring boot для моего понимания.
Моя общая цель: 1. Создать проект Spring boot как независимый jar и использовать его в другом проекте. 2. Свойства компонента Autowire внутри jar в соответствии с новым проектом. Сделайте его независимым.
То, что я делал до сих пор.
Project providerModule1
-
Объявите службу (MyService).
@Component public class MyService { @Autowired ServiceProperties serviceProperties; public String getInfoFromProperties() { return serviceProperties.toString(); } }
-
Создайте компонент с именем ServiceProperties, который будет использоваться в MyService.
package com.demo.multimodule.providerModule1.util; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import lombok.Data; @Component @Data public class ServiceProperties { @Value("${default.userName}") private String name; @Value("${default.email}") private String email; @Value("${default.age}") private String age; }
-
Загрузите служебные свойства компонента, прочитав свойства из файла yml.
по умолчанию: имя пользователя: userName1 email: default@email.com возраст: 18 лет
-
Создайте ProviderModule1 проекта с помощью плагина maven
Проект ParentProjectApplication 5. Загрузите зависимость maven.
<dependency>
<groupId>com.demo.multimodule</groupId>
<artifactId>providerModule1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>app-to-import</classifier>
</dependency>
-
Автоматическое подключение MyService из project providerModule1
package com.multimodule.demo.parentProject.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.demo.multimodule.providerModule1.service.MyService; @Service public class HomeService { @Autowired private MyService myService; public String getHomeInfo() { return "Home Info from Home service : " myService.getInfoFromProperties(); } }
-
Изначально myservice не загружался.Поэтому я добавил этот шаг в основной класс приложения:
@SpringBootApplication(scanBasePackages= {"com.demo.multimodule.providerModule1.service", "com.demo.multimodule.providerModule1.util"}) public class ParentProjectApplication {
}
-
Вопрос 1: Это единственный способ, с помощью которого я могу автоматически подключать компонент из jar. Если есть другой способ, дайте мне знать.
Я выполнил Project ParentProjectApplication, и, похоже, он работает так, как ожидалось.
Вопрос 2. Возможно ли автоматически подключить новое свойство yml из родительского приложения Project ParentProjectApplication и заставить компонент ServiceProperties проекта ProviderModule1 использовать его.
Комментарии:
1. 1. Вы можете автоматически подключить свои компоненты в counstructor, этим альтернативным способом.
Ответ №1:
вы можете попробовать spring.factory для создания компонентов. обратитесь к ссылке ниже