spring boot:從yaml配置文件中讀取數據的四種方式(spring boot 2.4.3)


一,從配置文件中讀取數據有哪些方法?

通常有3種用法:

1,直接使用value注解引用得到配置項的值

2,  封裝到Component類中再調用:

     可以通過value注解或ConfigurationProperties注解兩種方式訪問

3,  用Environment類從代碼中直接訪問

 

生產環境中推薦使用第二種,用一個統一的文件來加載,

而不必寫死到代碼中,如果配置有變更時可以統一修改也更方便

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,演示項目的相關信息

1,地址:

https://github.com/liuhongdi/yaml

2,功能說明:演示了從yaml配置文件讀取數據的方法

3,項目結構:如圖:

三,配置文件說明

1,application.yml

#server
server:
  port: 8081
  error:
    include-stacktrace: always
#profile
spring:
  profiles:
    active: prd

 

2,application-dev.yml

#images
app:
  goods:
    imagesUrlHost: http://127.0.0.1:81/goods
    imagesOrigDir: /data/file/html/goods/images
    imagesTmbDir: /data/file/html/goods/tmb
    extendNames:
      - jpg
      - gif
      - png
      - webp
    extendNames2: jpg,gif,png

 

3,application-prd.yml

#images
app:
  goods:
    imagesUrlHost: http://file.lhdtest.com/goods
    imagesOrigDir: /data/estore/file/html/goods/images
    imagesTmbDir: /data/estore/file/html/goods/tmb
    extendNames:
        - jpg
        - gif
        - png
        - webp
    extendNames2: jpg,gif,png

 

四,java代碼

1,constant/ConfigValue.java

package com.yaml.demo.constant;

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

/*
 * 從配置文件中讀取的變量
 *  lhd
 *  2020.10.15
 * */
@Component
public class ConfigValue {
    //imagesUrlHost
    @Value("${app.goods.imagesUrlHost}")
    public String imagesUrlHost;

    //imagesOrigDir
    @Value("${app.goods.imagesOrigDir}")
    public String imagesOrigDir;

    //imagesTmbDir
    @Value("${app.goods.imagesTmbDir}")
    public String imagesTmbDir;

    @Value("${app.goods.extendNames2}")
    public String[] extendNames2;
}

 

2,constant/ConfigProperties.java

package com.yaml.demo.constant;

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

import java.util.List;

/*
 * 從配置文件中讀取的變量
 *  lhd
 *  2020.10.15
 * */
@Component
@ConfigurationProperties(prefix = "app.goods")
public class ConfigProperties {
    private String imagesUrlHost;

    public String getImagesUrlHost() {
        return this.imagesUrlHost;
    }

    public void setImagesUrlHost(String imagesUrlHost) {
        this.imagesUrlHost = imagesUrlHost;
    }


    private List<String> extendNames;

    public List<String> getExtendNames() {
        return this.extendNames;
    }

    public void setExtendNames(List<String> extendNames) {
        this.extendNames = extendNames;
    }

}

 

3,controller/HomeController.java

@Controller
@RequestMapping("/home")
public class HomeController {

    @Resource
    private ConfigValue configValue;

    @Resource
    private ConfigProperties configProperties;

    @Resource
    private Environment environment;

    //從配置文件讀取變量imagesUrlHost
    @Value("${app.goods.imagesUrlHost}")
    private String imagesUrlHost;

    //四種方式打印從配置文件中讀取到的變量值
    @GetMapping("/home")
    @ResponseBody
    public String home() {

        String res = "第一種方法:直接用value引用:"+imagesUrlHost+":<br/>";
        res += "第二種方法:封裝到Component類中,Value注解:"+configValue.imagesUrlHost+":<br/>";
        res += "第三種方法:封裝到Component類中,ConfigurationProperties注解:"+configProperties.getImagesUrlHost()+":<br/>";
        res += "第四種方法:environment:"+environment.getProperty("app.goods.imagesUrlHost")+":<br/>";

        System.out.println("圖片類型:extendNames:");
        List<String> list = configProperties.getExtendNames();
        for (int i = 0; i < list.size(); i++) {
            String s = (String)list.get(i);
            System.out.println(i+":"+s);
        }

        System.out.println("圖片類型2:extendNames2:");
        for (int i = 0; i < configValue.extendNames2.length; i++){
            System.out.println(i+":"+configValue.extendNames2[i]);
        }

        return res;
    }
}

 

五,測試效果

1,訪問:

http://127.0.0.1:8081/home/home

返回:

 

 查看控制台:

 

 

六,查看spring boot版本

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.3)

 


免責聲明!

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



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