中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot怎么讀取配置文件到靜態工具類

發布時間:2021-12-16 17:22:33 來源:億速云 閱讀:294 作者:小新 欄目:開發技術

小編給大家分享一下springboot怎么讀取配置文件到靜態工具類,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

springboot讀取配置文件到靜態工具類

通常我們讀取配置文件可以用@Value注解和@Configuration,@ConfigurationProperties(prefix = "xxx")等注解,但是這種方式是無法把配置讀取到靜態變量的,如果我們想在項目初始化時把配置文件加載到一個工具類,然后通過靜態變量的方式調用的話我們就不能使用這兩種方法。

我們可以用Environment 來解決

不廢話了,直接上代碼

import javax.annotation.PostConstruct; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component; 
/**
 * 
 * @Description: 配置常量類——根據不同的spring-profile加載不同的配置
 * @author: eric.zhang
 * @date: 2018年7月20日 上午10:59:24
 */
@Component
public class ConfigConstant {
  @Autowired
  private Environment env;  
  public static String url;
  public static String param;  
 
  @PostConstruct
  public void readConfig() {
    url = env.getProperty("config.url");
    param = env.getProperty("config.param");
  }
}

我寫完以后發現有些麻煩,下面是改進的方法,不需要每個配置都去get一下,只需要把配置文件的key與工具類的靜態變量名寫成一樣的即可。

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field; 
import javax.annotation.PostConstruct; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component; 
/**
 * 
 * @Description: 配置常量類——根據不同的spring-profile加載不同的配置,變量名要與配置文件里寫的名一致
 * @author: eric.zhang
 * @date: 2018年7月20日 上午10:59:24
 */
@Component
public class ConfigConstant {
  @Autowired
  private Environment env;  
  public static String url;
  public static String name;  
  
  @PostConstruct
  public void readConfig() throws Exception {
    String prefix = "config.";
    Field[] fields = ConfigConstant.class.getFields();
    for(Field field : fields ){
      field.set(null, getProperty(prefix + field.getName()));
    }
  }
  
  private String getProperty(String key) throws UnsupportedEncodingException {
    return new String(env.getProperty(key).getBytes("ISO-8859-1"), "UTF-8");
  }
}

大哥說這樣寫依賴spring, 單測調代碼的時候不方便,所以又寫了一個不依賴spring的版本。

import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.util.Properties; 
/**
 * 
 * @Description: 配置常量類——根據不同的spring-profile加載不同的配置
 *               變量名把配置文件的key中的"."替換成"_"命名
 * @author: eric.zhang
 * @date: 2018年7月20日 上午10:59:24
 */
public class ConfigConstant { 
  public static String CONFIG_URL;
  public static String CONFIG_NAME;
 
  static {
    try {
      Properties props = new Properties();
      props.load(new InputStreamReader(
          ConfigConstant.class.getClassLoader().getResourceAsStream("application.properties"),
          "UTF-8"));
      String profile = props.getProperty("spring.profiles.active");
      String envFile = "application-" + profile + ".properties";
      Properties envProps = new Properties();
      envProps.load(new InputStreamReader(
          ConfigConstant.class.getClassLoader().getResourceAsStream(envFile), "UTF-8"));
      Field[] fields = ConfigConstant.class.getFields();
      for (Field field : fields) {
        field.set(null, envProps.getProperty(field.getName().replace("_", ".").toLowerCase()));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

將配置文件的值加載到工具類的靜態變量中(多環境運行加載)

首先創建一個SpringBoot項目

項目結構:

springboot怎么讀取配置文件到靜態工具類

創建pom文件,映入maven工程依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.csrcb</groupId>
    <artifactId>spring_static</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies> 
</project>

創建配置文件

在resource目錄下,創建配置文件application.yml,創建幾個不同環境的application-dev,application-sit、application-prod.yml的配置文件,稍后做測試使用,看是否加載不同環境下的配置參數的值

application.yml很簡單就一個端口號的配置:

springboot怎么讀取配置文件到靜態工具類

在application-dev.yml(開發環境的配置參數的值)、以及sit(測試)、uat(驗證)、prod(生產)環境設置一些值

springboot怎么讀取配置文件到靜態工具類

不同環境下的測試的配置參數的值不一致,為了測試參數名設置相同下,是否取得對應運行環境的值

創建實體類

1.創建加載配置文件的配置類

/**
 * @Classname TestConfig
 * @Description 加載配置文件的配置類
 * @Date 2020/6/16 16:28
 * @Created by gangye
 */
@Configuration
@Data
public class TestConfig {
    @Value("${ftp.username}")
    private String username;
 
    @Value("${ftp.passwd}")
    private String passwd;
 
    @PostConstruct
    public void init(){
        ClientUtil.setConfigInfo(this);
    }
}

2.創建工具類,工具類獲得配置類的參數值

/**
 * @Classname ClientUtil
 * @Description 工具類,將配置文件的數據通過config引入到靜態變量中
 * @Date 2020/6/16 16:29
 * @Created by gangye
 */
@Slf4j
public class ClientUtil { 
    private static String USERNAME;
    private static String PASSWD; 
    public static void setConfigInfo(TestConfig testConfig) {
        ClientUtil.USERNAME = testConfig.getUsername();
        ClientUtil.PASSWD = testConfig.getPasswd();
    }
 
    public static String getValue(){
        log.info("獲得配置文件的username的值:{}",USERNAME);
        return USERNAME;
    }
}

3.創建路由,模擬調用

/**
 * @Classname controller
 * @Date 2020/6/16 16:35
 * @Created by gangye
 */
@RestController
@RequestMapping(value = "/test")
public class TestController {
 
    @GetMapping("/getvalue")
    public String getValue(){
        return ClientUtil.getValue();
    }
}

4.創建啟動類,在啟動類中添加Bean,為了防止啟動時配置類的@Value注解找不到配置文件中的值,一個配置文件找不到繼續找

/**
 * @Classname AppStart
 * @Description 啟動類
 * @Date 2020/6/16 16:26
 * @Created by gangye
 */
@SpringBootApplication
public class AppStart {
    public static void main(String[] args) {
        SpringApplication.run(AppStart.class,args);
    }
}

啟動時添加對應的運行環境設置

springboot怎么讀取配置文件到靜態工具類

-Dspring.profiles.active=sit

若springboot版本低可能會出現

java.lang.IllegalArgumentException: Could not resolve placeholder ‘username' in value “${ftp.username}”這樣的報錯

解決辦法:在啟動類中添加下面的代碼

/**
     * Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘name' in value “${name}”
     * @Description 為了防止啟動時配置類的@Value注解找不到配置文件中的值,一個配置文件找不到繼續找
     * @Date 2020年6月17日14:40:08
     * @return
     */
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
        PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
        c.setIgnoreUnresolvablePlaceholders(true);
        return c;
    }

springboot怎么讀取配置文件到靜態工具類

再次啟動環境(sit下)

在瀏覽器中輸入:http://localhost:8000/test/getvalue

springboot怎么讀取配置文件到靜態工具類

再指定prod環境下的運行

springboot怎么讀取配置文件到靜態工具類

使用瀏覽器請求路由

springboot怎么讀取配置文件到靜態工具類

看完了這篇文章,相信你對“springboot怎么讀取配置文件到靜態工具類”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒城县| 湘潭市| 思茅市| 新晃| 聊城市| 明光市| 灵寿县| 西华县| 长武县| 抚松县| 监利县| 罗城| 浑源县| 福建省| 建始县| 遂川县| 贵德县| 洛南县| 敦煌市| 西贡区| 营山县| 班戈县| 廉江市| 濮阳市| 葫芦岛市| 嫩江县| 资讯| 德格县| 阿城市| 如东县| 子长县| 沙洋县| 康马县| 苏尼特右旗| 久治县| 宁国市| 贡嘎县| 曲阜市| 文成县| 英山县| 晋宁县|