【问题标题】:Autowire Bean and application.yml file in another jar fileAutowire Bean 和 application.yml 文件在另一个 jar 文件中
【发布时间】:2021-02-13 21:03:24
【问题描述】:

为了我的理解,我正在试验 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。

    默认值: 用户名:用户名1 电子邮件: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. 最初我的服务没有被加载。因此我将此步骤添加到主应用程序类:

      @SpringBootApplication(scanBasePackages= {"com.demo.multimodule.providerModule1.service",
                   "com.demo.multimodule.providerModule1.util"})
           public class ParentProjectApplication {
      

      }

问题 1:这是我可以从 jar 中自动装配 bean 的唯一方法吗?如果有其他方法,请告诉我。

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

问题 2:是否可以从项目 ParentProjectApplication 自动装配 新的 yml 属性 并使 ServiceProperties 成为项目 ProviderModule1 使用它。

【问题讨论】:

  • 1.您可以通过这种替代方式在 counstructor 中自动装配您的 bean。

标签: spring-boot maven executable-jar


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多