NullPointerException при привязке ConfigurationProperties (Spring Boot)

Я борюсь с кодом, и я понятия не имею, почему ... Вот мой код:

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

И мои свойства bean

@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;
    }
}

Который ссылается на другой компонент

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: Failed to load ApplicationContext...

Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'workflow.datacenter' to java.util.List at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:250) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:226) at org.springframework.boot.context.properties.bind.Binder.lambda$bindBean$4(Binder.java:331) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:72) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:61) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:53)...

Caused by: java.lang.NullPointerException: null at java.util.TreeMap.compare(TreeMap.java:1294) at java.util.TreeMap.put(TreeMap.java:538) at java.util.TreeSet.add(TreeSet.java:255) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.util.LinkedList$LLSpliterator.forEachRemaining(LinkedList.java:1235) at 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$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) at org.springframework.boot.context.properties.bind.IndexedElementsBinder.assertNoUnboundChildren(IndexedElementsBinder.java:137)...

Не могли бы вы мне помочь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 374
1

Ответы 1

Кажется, работает, если вы начинаете индексирование с 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

Whaou Большое спасибо! Вы сделали мой день! Он работал до обновления версии весенней загрузки до 2.0.0 (+ другие вещи), поэтому я не думал об этом!

Chouch 13.03.2018 21:15

Пожалуйста, и да, они изменили привязку свойств: github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-‌ 2.0 См. «Константы»

damianxb3 13.03.2018 21:40

Другие вопросы по теме