簡體   English   中英

綁定ConfigurationProperties時發生NullPointerException(春季啟動)

[英]NullPointerException when binding ConfigurationProperties (Spring Boot)

我正在為某些代碼而苦苦掙扎,但不知道為什么...這是我的代碼:

@SpringBootApplication
@EnableConfigurationProperties(WorkflowRootProperties.class)
@ComponentScan
@ActiveProfiles("test")
public class TestApplication {
    public static void main(String[] args) {    
        SpringApplication.run(TestApplication.class, args);
    }
}

還有我的屬性豆

@ConfigurationProperties("workflow")
public class WorkflowRootProperties {
    private List<Datacenter> datacenter = new ArrayList<>();

    public List<Datacenter> getDatacenter() {
        return datacenter;
    }

    public void setDatacenter(List<Datacenter> datacenter) {
        this.datacenter = datacenter;
    }
}

哪個引用另一個bean

public class EnvProperties {
    public static class Datacenter {
        private List<Env> env = new ArrayList<>();

        public List<Env> getEnv() {
            return env;
        }

        public void setEnv(List<Env> env) {
            this.env = env;
        }
    }

    public static class Env {
        private List<Instance> instance = new ArrayList<>();

        public List<Instance> getInstance() {
            return instance;
        }

        public void setInstance(List<Instance> instance) {
            this.instance = instance;
        }
    }

    public static class Instance {
        private String port;

        public String getPort() {
            return port;
        }

        public void setPort(String port) {
            this.port= port;
        }
    }
}

最后,我的財產是

workflow.datacenter[1].env[1].instance[1].port=8080
workflow.datacenter[2].env[1].instance[1].port=8082
workflow.datacenter[1].env[1].instance[2].port=8080

我的錯誤是在初始化時,我得到了我無法理解的NPE。

java.lang.IllegalStateException:無法加載ApplicationContext ...

原因:org.springframework.boot.context.properties.bind.BindException:無法將“ workflow.datacenter”下的屬性綁定到org.springframework.boot.context.properties.bind.Binder.handleBindError(在org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:226)在org.springframework.boot.context.properties.bind.Binder.lambda $ bindBean $ 4(Binder .java:331),位於org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:72),位於org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:61 )org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:53)...

引起原因:java.lang.NullPointerException:java.util.TreeMap.put(TreeMap.java:1294)處的java.util.TreeMap.put(TreeMap.java:538)為null .java:255),位於java.util.stream.ReduceOps $ 3ReducingSink.accept(ReduceOps.java:169),位於java.util.LinkedList $ LLSpliterator.forEachRemaining(LinkedList.java:1235),位於java.util.stream.ReferencePipeline $ Head.forEach(ReferencePipeline.java:580)at java.util.stream.ReferencePipeline $ 7 $ 1.accept(ReferencePipeline.java:270)at java.util.Iterator.forEachRemaining(Iterator.java:116)at java.util.Spliterators java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)處的$ IteratorSpliterator.forEachRemaining(Spliterators.java:1801)在java.util處的java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)處。 stream.ReduceOps $ ReduceOp.evaluateSequential(ReduceOps.java:708)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.collect(ReferencePipeline.j ava:499)at org.springframework.boot.context.properties.bind.IndexedElementsBinder.assertNoUnboundChildren(IndexedElementsBinder.java:137)...

請你幫助我好嗎?

如果您從0開始索引,則似乎可以工作:

workflow.datacenter[0].env[0].instance[0].port=8080
workflow.datacenter[1].env[0].instance[0].port=8082
workflow.datacenter[0].env[0].instance[1].port=8080

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM