将Autowire Bean和application.yml文件放在另一个jar文件中

问题描述

我正在尝试使用Spring Boot多模块项目,以了解我的理解。

我的总体目标是: 1.将Spring boot项目构建为独立的jar,并在另一个项目中使用它。 2.根据新项目在jar中自动装配Bean属性。使它独立。

到目前为止我所做的事情。

项目 providerModule1

  1. 声明服务(MyService)。

     @Component
     public class MyService {
    
         @Autowired
         ServiceProperties serviceProperties;
    
         public String getInfoFromProperties() {
             return serviceProperties.toString();
         }
     }
    
  2. 创建一个名为 ServiceProperties 的bean,该bean将用于 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文件读取属性来加载bean ServiceProperties。

    认值: userName:userName1 电子邮件:default@email.com 年龄:18

  4. 使用maven插件构建项目ProviderModule1

项目 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. 从项目providerModule1自动连接MyService

     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 :这是我可以从罐子中自动装豆的唯一方法。如果还有其他方法,请告诉我。

我执行了Project ParentProjectApplication,它似乎按预期工作。

问题2 :是否可以从Project ParentProjectApplication 自动关联新的yml属性,并制作 ServiceProperties 的bean项目 ProviderModule1 利用它。

解决方法

您可以尝试spring.factory创建bean。 请参阅下面的链接

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