导入的Jar的Spring bean属性被应用bean定义覆盖

问题描述

我在导入的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。可以解决这个问题吗?

解决方法

您可以使用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
}