【问题标题】:Spring bean properties of imported Jar are overridden by application bean definition导入 Jar 的 Spring bean 属性被应用程序 bean 定义覆盖
【发布时间】:2020-09-04 06:12:52
【问题描述】:

我在导入的 jar 文件中有一个同名的类。

@Configuration
@ConfigurationProperties(prefix = "queues")
public class QueueProperties {
String queuename;
String queuemanager;
//Rest code
}

jar 文件中也存在具有相同属性的相同类。

我在 jar bean 的配置文件中给出了 bean 定义。

@Bean
public com.jar.class.path getQueueProperties() {
    return new com.jar.class.path.QueueProperties();
}

但是当应用程序启动时,它使用的是我的 bean 类的属性,而不是为 jar 类 bean 定义的属性。

属性值保存在 application.yml 文件中。

queue:
  queueManager: 'queuemanager'
  queuename: 'queuename'

jar:
 class: 
   queue:
     queueManager: 'queuemanager'
     queuename: 'queuename'

我想将 yml 中定义的属性用于 jar 文件 bean。有没有办法解决这个问题?

【问题讨论】:

  • 您不应将@Configuration 用作常规bean。它们是在 Spring 上下文初始化中较早创建的,您可能会遇到意外行为,例如 AOP 功能无法正常工作。

标签: java spring spring-boot


【解决方案1】:

您可以使用 Spring 配置文件。

queue:
  queueManager: 'queuemanager'
  queuename: 'queuename'
---
spring:
  profiles: jar
queue:
  queueManager: 'queuemanager'
  queuename: 'queuename'

您可以在命令行中使用 --spring.profiles.active=jar 来使用您的 jar 配置文件。

你不应该像普通的 bean 一样使用配置,这样做:

@Configuration
public class MyConfiguration {

    
    @Bean
    @ConfigurationProperties(prefix = "queue")
    public com.jar.class.path getQueueProperties() {
        return new com.jar.class.path.QueueProperties();
    }

}

public class QueueProperties {
    String queuename;
    String queuemanager;
    //Rest code
}

【讨论】:

  • 我想使用我当前应用程序 yml 文件的属性。我在我的应用程序中使用这些属性。我需要 jar 文件属性,当调用 jar 内的类的方法时,应使用 jar 属性初始化 bean queueProperties(这也是 jar 类中的依赖项)。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2016-06-08
  • 2017-07-22
  • 2023-01-25
相关资源
最近更新 更多