Компонент Autowire и приложение.файл yml в другом файле jar

#spring-boot #maven #executable-jar

#весенняя загрузка #maven #исполняемый файл-jar

Вопрос:

Я экспериментирую с многомодульными проектами spring boot для моего понимания.

Моя общая цель: 1. Создать проект Spring boot как независимый jar и использовать его в другом проекте. 2. Свойства компонента Autowire внутри jar в соответствии с новым проектом. Сделайте его независимым.

То, что я делал до сих пор.

Project providerModule1

  1. Объявите службу (MyService).

      @Component
     public class MyService {
    
         @Autowired
         ServiceProperties serviceProperties;
    
         public String getInfoFromProperties() {
             return serviceProperties.toString();
         }
     }
      
  2. Создайте компонент с именем 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;
     }
      
  3. Загрузите служебные свойства компонента, прочитав свойства из файла yml.

    по умолчанию: имя пользователя: userName1 email: default@email.com возраст: 18 лет

  4. Создайте 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>
  
  1. Автоматическое подключение 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();
         }
     }
      
    1. Изначально 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 для создания компонентов. обратитесь к ссылке ниже

https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/html/boot-features-developing-auto-configuration.html