Spring Boot讀取 properties或者application.yml 配置文件中的數據

Spring Boot讀取配置的 5 種方式

讀取application文件

在application.yml或者properties文件中添加:

  • user.address=china
    user.company=demo
    user.name=讓我康康

     

 1、使用@Value註解讀取

     直接 代碼如下:

package im.homeapi.controller;

import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class HomeController {

    @Value("${user.address}")
    private String address;

    @Value("${user.company}")
    private String company;

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

    //value 指定訪問地址,method 指定請求類型
    @RequestMapping(value = "/home",method = RequestMethod.GET)
    public  String Home()
    {
        return "Hello Word";
    }
    @RequestMapping(value = "/getConfig")
    public String getConfig() {
        return "獲取的配置信息 :" +
                " name=" + name +
                " address=" + address +
                " , company=" + company;
    }


}

 放到單獨的配置類中讀取:

package im.homeapi.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class UserConfig {

    @Value("${user.address}")
    private String address;

    @Value("${user.company}")
    private String company;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getName() {
        return name;
    }

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

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

調用如下:

    @Autowired
    private UserConfig userConfig;
    //讀取配置類
    @RequestMapping(value = "/getConfigEntity")
    public String getConfigEntity() {
        return "獲取的配置信息 :" +
                " name=" + userConfig.getName() +
                " address=" + userConfig.getAddress() +
                " , company=" + userConfig.getCompany();

    }

   運行結果如下:

 2、使用@ConfigurationProperties註解讀取方式

代碼如下:

package im.homeapi.entity;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "user")
public class UserConfig1 {
    private String address;
    private String company;
    private String name;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getName() {
        return name;
    }

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

調用:

package im.homeapi.controller;

import im.homeapi.entity.UserConfig;
import im.homeapi.entity.UserConfig1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class ConfigController {
    @Autowired
    private UserConfig1 userConfig;
    //讀取配置類 ConfigurationProperties註解讀取方式
    @RequestMapping(value = "/getConfigEntity1")
    public String getConfigEntity() {
        return "獲取的配置信息 :" +
                " name=" + userConfig.getName() +
                " address=" + userConfig.getAddress() +
                " , company=" + userConfig.getCompany();

    }
}

運行結果:

3、讀取指定文件

     3.1、@PropertySource+@Value註解讀取方式

     在resources下新建配置config/db-config.properties 

     注意:@PropertySource不支持yml文件讀取。

db.username=root
db.password=123456

如圖:

代碼:

package im.homeapi.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig {

    @Value("${db.username}")
    private String username;

    @Value("${db.password}")
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

調用代碼:

package im.homeapi.controller;
import im.homeapi.entity.DBConfig;
import im.homeapi.entity.UserConfig;
import im.homeapi.entity.UserConfig1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping(value="/api")
public class DbController {
    @Autowired
    private DBConfig dbConfig;
    //讀取配置類 PropertySource+@Value註解讀取方式
    @RequestMapping(value = "/getConfigdb")
    public String getConfigdb() {
        return "獲取的配置信息 :" +
                " name=" + dbConfig.getUsername() +
                " , password=" + dbConfig.getPassword();
    }
}

運行結果:

3.2、@PropertySource+@ConfigurationProperties註解讀取方式

   代碼:

package im.homeapi.entity;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })
public class DBconfig1 {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

調用代碼:

    @Autowired
    private DBconfig1 dbConfig1;
    //讀取配置類 @PropertySource+@ConfigurationProperties註解讀取方式
    @RequestMapping(value = "/getConfigdb1")
    public String getConfigdb1() {
        return "獲取的配置信息 :" +
                " name=" + dbConfig1.getUsername() +
                " , password=" + dbConfig1.getPassword();
    }

運行結果:

@Component 表示將該類標識爲Bean

@ConfigurationProperties(prefix = "db")用於綁定屬性,其中prefix表示所綁定的屬性的前綴。

@PropertySource(value = "config/db-config.properties")表示配置文件路徑。

4、使用Environment讀取

代碼:

   @Autowired
    private Environment environment;
    //讀取配置類 CEnvironment讀取方式
    @RequestMapping(value = "/getConfigenv")
    public String getConfigenv() {
        return "獲取的配置信息 :" +
                " name=" + environment.getProperty("user.name") +
                " address=" + environment.getProperty("user.address") +
                " , company=" + environment.getProperty("user.company");

    }

運行結果:

總結

從以上示例來看,Spring Boot可以通過@PropertySource,@Value,@Environment,@ConfigurationProperties來綁定變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章