Springboot獲取配置屬性的幾種方式


錄:

1、controller或service組件中,直接使用@Value獲取
2、@Component和@Value將屬性封裝成實體類,在使用的類中注入
3、@Component掃描成bean,並使用@ConfigurationProperties進行普通屬性注入
4、通過 Environment 獲取

 

  需求:獲取配置文件中的屬性

   application.properties

server.port=8089
server.servlet.context-path=/HelloWorld
user.username=\u5F20\u4E09
user.password=123 spring.profiles.active=dev

  application-dev.properties

mysql.jdbcName=com.mysql.jdbc.Driver
mysql.dbUrl=jdbc:mysql://localhost:3306/db_boot
mysql.userName=root
mysql.password=123456

 

1、controller或service組件中,直接使用@Value獲取    <-返回目錄

/**
 * 測試從application.properties中獲取參數
 * 
 * @author oy
 * @version 1.0
 * @date 2018年12月23日
 * @time 下午9:17:54
 */
@Controller
//@RestController 使用該注解后,@ResponseBody注解可以省略
public class HelloWorldController {
    
    /**
     * 注入自定義屬性
     */
    @Value("${user.username}")
    private String username;
    
    @Value("${user.password}")
    private String password;
    
    @RequestMapping("/showUsernamePassword")
    @ResponseBody
    public String showUsernamePassword() {
        return "用戶名:" + username + "<br/>"
                + "密碼:" + password;
    }
    
}

 

2、@Component和@Value將屬性封裝成實體類,在使用的類中注入    <-返回目錄

@Controller
public class HelloWorldController {
    
    @Autowired
    // User類通過@Component掃描成bean,並使用@Value進行普通屬性注入
    private User user;/**
     * 測試:User類通過@Component掃描成bean,並使用@Value進行普通屬性注入
     * 
     * @return
     */
    @RequestMapping("/showUser")
    @ResponseBody
    public String showUser() {
        return "用戶名:" + user.getUsername() + "<br/>"
                + "密碼:" + user.getPassword();
    }
    
}

  User實體類

package com.oy.entity;

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

/**
 * @author oy
 * @version 1.0
 * @date 2018年12月23日
 * @time 下午10:17:27
 */
@Component
public class User {
    @Value("${user.username}")
    private String username;
    
    @Value("${user.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;
    }

}

 

3、@Component掃描成bean,並使用@ConfigurationProperties進行普通屬性注入    <-返回目錄

  使用@ConfigurationProperties進行普通屬性注入。需要添加依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

 

 

@Controller
public class HelloWorldController {

    @Autowired
    // MysqlProperties類通過@Component掃描成bean,並使用@ConfigurationProperties進行普通屬性注入
    private MysqlProperties mysqlProperties;
   /**
     * 測試: MysqlProperties類通過@Component掃描成bean,並使用@ConfigurationProperties進行普通屬性注入
     * @return
     */
    @RequestMapping("/showJdbc")
    @ResponseBody
    public String showJdbc() {
        return "驅動類:" + mysqlProperties.getJdbcName() + "<br/>"
                + "URL:" + mysqlProperties.getDbUrl() + "<br/>"
                + "用戶名:" + mysqlProperties.getUserName() + "<br/>"
                + "密碼:" + mysqlProperties.getPassword() + "<br/>";
    }
    
}

  MysqlProperties實體類

package com.oy.entity;

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

/**
 * 注解@Component表明本類會被掃描,生成bean
 * 
 * 掃描該組件時,發現有@ConfigurationProperties(prefix = "mysql"),
 * 會結合前綴"mysql" + 屬性名去application.properties找對應的值進行注入。
 * 
 * @author oy
 * @version 1.0
 * @date 2018年12月23日
 * @time 下午10:13:56
 */
@Component
@ConfigurationProperties(prefix = "mysql")
public class MysqlProperties {
    private String jdbcName;
    private String dbUrl;
    private String userName;
    private String password;

    public String getJdbcName() {
        return jdbcName;
    }

    public void setJdbcName(String jdbcName) {
        this.jdbcName = jdbcName;
    }

    public String getDbUrl() {
        return dbUrl;
    }

    public void setDbUrl(String dbUrl) {
        this.dbUrl = dbUrl;
    }

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

 

4、通過 Environment 獲取    <-返回目錄

  另外參考:視頻《一起學Beetl》記錄3.1

@Controller
public class HelloWorldController {
  /**
     * 注入環境變量
     */
    @Value("${USERDOMAIN}")
    private String userdomain;

  /** * 瀏覽器輸入:http://localhost:8089/HelloWorld/helloworld * @return */ @RequestMapping("/helloworld") @ResponseBody public String sayHello() { return "hello world!!!" + userdomain; // hello world!!!oy-PC } @Autowired private Environment env; @RequestMapping("/ent") @ResponseBody public String ent() { return env.getProperty("user.username"); } }

---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM