当前位置: 首页 > 知识库问答 >
问题:

如何将前缀属性注入java.util.属性?

孔才
2023-03-14

Spring Boot提供了一种优雅的方法,可以使用@ConfigurationProperties(prefix="foo")将带有特定键前缀的属性注入Configuration类。这是显示在这里和这里。问题是,如何将前缀属性注入到java.util.Properties实例中,如下所示?

@Configuration
@EnableConfigurationProperties
public class FactoryBeanAppConfig {

    @Bean
    @ConfigurationProperties(prefix = "kafka")
    public Producer<String, String> producer(Properties properties) throws Exception {
        Producer<String, String> producer = new KafkaProducer<String, String>(properties);
        return producer;
    }

}

共有2个答案

宋凌龙
2023-03-14

您可以定义一个用@ConfigurationProperties注释的新bean,如下所示:

@Bean
@ConfigurationProperties(prefix = "kafka")
public Properties kafkaProperties() {
    return new Properties();
}

@Bean
public Producer<String, String> producer() throws Exception {
    return new KafkaProducer<String, String>(kafkaProperties());
}

(摘自https://stackoverflow.com/a/50810923/500478)

牛凌
2023-03-14

这不起作用,因为此属性注入基于对象上的getter和setter,该对象应包含@ConfigurationProperties定义一个包含所需属性的类,如下所示:

@ConfigurationProperties(prefix = "kafka.producer")
public class MyKafkaProducerProperties {

  private int foo;

  private string bar;

  // Getters and Setter for foo and bar

}

然后像这样在配置中使用它

@Configuration
@EnableConfigurationProperties(MyKafkaProducerProperties.class)
public class FactoryBeanAppConfig {

  @Bean
  public Producer<String, String> producer(MyKafkaProducerProperties kafkaProperties) throws Exception {
    Properties properties = new Properties();
    properties.setProperty("Foo", kafkaProperties.getFoo());
    properties.setProperty("Bar", kafkaProperties.getBar());
    Producer<String, String> producer = new KafkaProducer<String, String>(properties);
    return producer;
  }
}

使现代化

由于您评论说您不希望将每个属性表示为java代码,因此可以使用HashMap作为@ConfigurationProperties中唯一的属性

@ConfigurationProperties(prefix = "kafka")
public class MyKafkaProducerProperties {

  private Map<String, String> producer= new HashMap<String, String>();

  public Map<String, String> getProducer() {
    return this.producer;
  }
}

应用程序中。属性您可以指定如下属性:

kafka.producer.foo=hello
kafka.producer.bar=world

在您的配置中,您可以这样使用它:

@Configuration
@EnableConfigurationProperties(MyKafkaProducerProperties.class)
public class FactoryBeanAppConfig {

  @Bean
  public Producer<String, String> producer(MyKafkaProducerProperties kafkaProperties) throws Exception {

    Properties properties = new Properties();

    for ( String key : kafkaProperties.getProducer().keySet() ) {
     properties.setProperty(key, kafkaProperties.getProducer().get(key));
    }

    Producer<String, String> producer = new KafkaProducer<String, String>(properties);
    return producer;
  }
}
 类似资料:
  • 在我的Spring Boot Application中,我用一个调用存储过程的方法实现了以下类。 由于调用存储过程需要数据库连接,所以我需要从应用程序加载这些相应的属性值。特性: 基于以下关于类似问题的文章,Spring boot—应用程序中的自定义变量。属性,并在您自己的类和Spring Boot@ConfigurationProperties示例中使用Spring Boot配置属性,我为我的类

  • 我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。

  • 问题内容: 我是Angular的新手,正在尝试了解前缀“ x-”和“ data-”的含义。在指令文档(http://docs.angularjs.org/guide/directive)中,这些前缀将使指令“符合HTML验证程序”。这到底是什么意思? 问题答案: HTML5规范允许使用任意属性,只要它们带有数据前缀即可,如下所示: 而这将是无效的HTML5: 有关数据属性的更多信息,请在此处查看。

  • 主要内容:构造函数注入,setter 注入,短命名空间注入所谓 Bean 属性注入,简单点说就是将属性注入到 Bean 中的过程,而这属性既可以普通属性,也可以是一个对象(Bean)。 Spring 主要通过以下 2 种方式实现属性注入: 构造函数注入 setter 注入(又称设值注入) 构造函数注入 我们可以通过 Bean 的带参构造函数,以实现 Bean 的属性注入。 使用构造函数实现属性注入大致步骤如下: 在 Bean 中添加一个有参构造函数,构造

  • 问题内容: 我的Jenkins 2.19.4使用管道:声明式代理程序API 1.0.1。如果您无法定义变量来分配读取的属性,那么如何使用readProperties? 例如,要捕获SVN版本号,我目前以脚本样式使用以下代码捕获它: 然后我可以使用: 由于以声明式定义svnProp是不合法的,因此如何使用readProperties? 问题答案: 您可以使用标记内的步骤来运行任意管道代码。 所以符合

  • 问题内容: 我在应用程序中使用spring,并且能够将类路径中某些文件的某些属性注入到我的应用程序中,并且一切正常。即 现在我可以在春季环境中使用。在我的主要班级中: 它也可以正常工作,我的问题是,如何在春季环境属性中插入属性文件位置,而不是一开始就没有,我想使我的应用程序可配置。如果我从中执行我的应用程序,或者我假设在应用程序上下文中该值应为或 问题答案: 有时我也遇到类似的问题。我的要求是属性