如何在springboot中以jar形式重复配置并用作依赖

问题描述 投票:0回答:1

我们有许多用于多个任务的微服务,其中大多数都有一些常见的功能,如日志配置、指标配置和 kafka 配置等。 我们计划拥有一个具有通用功能的通用 JAR,并在所有微服务中使用。

当我们使用

application.yml
创建自定义 springboot jar 时,它具有这些通用配置和一些其他 @Component 和 @Service 类,并作为依赖项包含在微服务中,它不会从 JAR 内特定的
application.yml
读取任何属性。

自定义 springboot jar -

src/main/java - 

    @Configuration
    public class KafkaConfiguration {}
    
    @Service
    public class CommonProcessor {}

src/main/资源-

application.yml

logging:
  level:
    org.apache: DEBUG
spring:
  cloud:
    stream:
      kafka:
        binder:
          autoCreateTopics: false
          brokers: localhost:9092
          configuration:
            sasl:
              jaas:
                config: org.apache.kafka.common.security.plain.PlainLoginModule required username="" password="";

KafkaConfiguration.java
中,我正在阅读上面的属性并创建kafka连接、kafka模板对象等,如果我在这个jar中编写示例消费者/生产者并作为springboot项目运行,一切都会正常。

Bu我想在我的微服务中使用这个jar作为依赖项,并利用kafka连接/kafka模板等,即当它无法从上面加载任何属性时

application.yml
并且无法创建bean。

微服务结构-

src/main/java

@Component
public class Consumer {
@Autowired
KafkaTemplate kafkaTemplate;
}

src/main/资源

application.yml

test:
 property: test
example:
 service:
  url: https://localhost:8080/service

pom.xml

<dependency>
<groupId>com.test</groupId>
<artifactId>common-jar</artifactId>
<version>1.0</version>

我在这里缺少什么,因为我的 JAR 文件无法通过加载属性来创建在其中定义的 bean?这种拥有 2 个 application.yml 的方法不正确吗?在一个地方拥有共同属性的最佳方式是什么?

java spring-boot maven spring-kafka
1个回答
0
投票

第一个问题

如果依赖项具有不同的包名称,则使用

@ComponentScan
如下所示从另一个包加载任何 bean。

@ComponentScan(basePackages = "com.test.dependency")

您还可以在主应用程序中以编程方式声明 beans。

第二个问题

有很多方法可以做到这一点。你可以

  1. 导入属性源(使用@Import)
  2. 有一个自动配置注释(看看这个自动配置示例
  3. 使用类路径解析从属性加载默认值。 (有关如何读取 application.properties 的信息,请参阅相同的 SO)

对于问题3:

IMO,依赖项必须允许覆盖主应用程序的属性。作为默认值,您可以保留依赖项中的值,但是否选择默认值必须由主应用程序决定。这种方法可以在许多其他 sdk 甚至 spring 模块本身中看到。

© www.soinside.com 2019 - 2024. All rights reserved.