Java 在弹簧靴中使用yaml

Java 在弹簧靴中使用yaml,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,我已经编写了一个restful web服务,帖子生成了一条Kafka消息,Get使用Kafka主题。我硬编码了允许我连接卡夫卡的属性。我想将其移动到src/main/resources中的yaml文件中 producer: bootstrap.servers: "localhost:9092" acks: "all" retries: 0 batch.size: 16384 linger.ms: 1 buffer.memory: 33554432 key.serial

我已经编写了一个restful web服务,帖子生成了一条Kafka消息,Get使用Kafka主题。我硬编码了允许我连接卡夫卡的属性。我想将其移动到src/main/resources中的yaml文件中

producer:
  bootstrap.servers: "localhost:9092"
  acks: "all"
  retries: 0
  batch.size: 16384
  linger.ms: 1
  buffer.memory: 33554432
  key.serializer: "org.apache.kafka.common.serialization.StringSerializer"
  value.serializer: "org.apache.kafka.common.serialization.StringSerializer"
然后我尝试在我的卡夫卡制作人代码中得到这个

@Service
public class SonicRestKafkaProducer {
    @Value("${producer.bootstrap.servers}")
    String bootStrapServers;

public void buildProducer() {
        Properties props = new Properties();
        if (bootStrapServers == null) {System.out.println("bootStrapServers is null");}
        props.put("bootstrap.servers", bootStrapServers);
这将导致一个空指针

bootStrapServers is null
2016-02-15 17:09:14.941 ERROR 10846 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
    at java.util.Hashtable.put(Hashtable.java:459) ~[na:1.8.0_31]
    at com.sonicdrivein.bdp.kafka.restproxy.kafka.api.SonicRestKafkaProducer.buildProducer(SonicRestKafkaProducer.java:59) ~[kafka-rest-proxy-0.1.0.jar!/:0.1.0]

我尝试创建一个单独的类。我觉得这很简单,但我在文档或此处没有看到任何解释。

1)请分享加载您的
yaml
文件的代码。2) 谁在调用您的
buildProducer()
方法,以及在哪里。。。请注意,自动连接/注入发生在对象实例化之后(出于明显的原因),因此在构造函数中的使用可能会有问题……我建议使用@AndyWilkinson,而不是使用
@Value
,我尝试过
@ConfigurationProperties(prefix=“producer”)公共类SonicRestKafkaProducer{@Value(${bootstrap.servers}")字符串bootstrapserver;
并且我仍然得到空值pointer@Morfic我不是在编写代码来加载yaml。我假设spring boot为我加载了它。我可能错了。该类当前是作为单例编写的。我不想这样做。buildProducer创建了一个kafka producer。如果有错误,我将关闭kafka producercer并清空类变量。每当使用该变量与kafka对话时,我都会检查它是否为null,然后调用buildProducer创建一个新的。kafka建议使用一个producer。@Morfic作为单例,我的构造函数是私有的。我想知道这是否是一个问题。