簡體   English   中英

ConfigurationProperties不綁定屬性

[英]ConfigurationProperties does not bind properties

我想通過使用@ConfigurationProperties注釋將我的application.properties自動綁定到一個類中。 首先,我嘗試使用@Value注釋,並能夠將屬性值注入類變量。 但是,@ ConfigurationProperties沒有將屬性注入值。

我的application.properties:

spring.jpa.show-sql=false
my.url=my_url
my.name=muatik

application.java

package com.muatik;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;


@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        final ApplicationContext ctx = SpringApplication.run(Application.class, args);
        final ConfigBinder confs = ctx.getBean(ConfigBinder.class);
        System.out.println(confs.getUrl());
        System.out.println(confs.getName());
    }

}

ConfigBinder.java

package com.muatik;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;



@Component
@ConfigurationProperties(prefix="my")
public class ConfigBinder {

    @Value("${my.name}")
    private String name;

    private String url; // expected to be filled automatically

    public String getUrl() {
        return this.url;
    }

    public String getName() {
        return this.name;
    }
}

輸出:

...
2017-01-18 15:19:29.720  INFO 4153 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-01-18 15:19:29.724  INFO 4153 --- [           main] com.muatik.Application                   : Started Application in 4.212 seconds (JVM running for 4.937)
null
muatik

這個實現有什么問題?

編輯和解決方案 :可能的重復: Spring Boot @ConfigurationProperties不從環境中檢索屬性

我發現我錯過了ConfigBinder中的setter。 添加后,它現在可以使用了。

您需要從屬性類中刪除@Component並添加setter,因為@ConfigurationProperties使用標准bean屬性綁定:

@ConfigurationProperties(prefix="my")
public class ConfigBinder {

    private String name;

    private String url; // expected to be filled automatically

    public String getUrl() {
        return this.url;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

並將@EnableConfigurationProperties添加到您的主類:

@SpringBootApplication
@EnableConfigurationProperties(ConfigBinder.class)
public class Application {

    public static void main(String[] args) {
        final ApplicationContext ctx = SpringApplication.run(Application.class, args);
        final ConfigBinder confs = ctx.getBean(ConfigBinder.class);
        System.out.println(confs.getUrl());
        System.out.println(confs.getName());
    }

}

主要問題是你沒有設置者。 當你把setter放到ConfigBuilder工作正常。 ConfigBuilder必須是這樣的

@Component
@ConfigurationProperties(prefix="my")
public class ConfigBinder {

    private String name;

    private String url;

    // Getters and Setters !!!
}

暫無
暫無

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

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