java的自定義配置文件統一讀取配置類示例

前言:在咱們的平常編程中不免會有些咱們自定義的配置,雖然Java中提供了不少的讀取配置文件的方法,可是當咱們須要修改配置文件的key的時候,就會發現太過散亂了,工做量也會很大,涉及的文件還不少,一不當心就要出問題。那這個時候若是咱們可以把全部的配置的key都放到一個文件中,其餘文件須要獲取配置的時候都調用這個文件,那麼即便無論怎麼修改配置配置文件的key,我也只須要修改這個文件,剛纔的問題不就獲得了完美的解決了麼java

廢話很少說,直接上代碼spring

項目目錄結構apache

 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sxy</groupId>
    <artifactId>properties-read-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>properties-read-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <commons.io.version>2.5</commons.io.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons.io.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
pom.xml

 自定義配置文件:springboot

this.custom.config.content = 這是個人自定義配置內容
custom-config.properties

 配置文件加載類:maven

package com.sxy.propertiesreaddemo.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

import java.io.IOException;
import java.io.InputStream;
import java.util.NoSuchElementException;
import java.util.Properties;

/**
 * @Description 文件載入工具類.
 *                   可載入多個properties文件,
 *                   相同的屬性在最後載入的文件中的值將會覆蓋以前的值,但以System的Property優先.
 * @Author SuXingYong
 * @Date 2020/7/11 20:55
 **/
@Slf4j
public class PropertiesLoader {

    private static ResourceLoader resourceLoader = new DefaultResourceLoader();

    private final Properties properties;

    public PropertiesLoader(String... resourcesPaths) {
        properties = loadProperties(resourcesPaths);
    }

    /**
     * @Description  取出Property,但以System的Property優先,取不到返回空字符串.
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     * @Param [key]
     * @param key 配置文件的key
     * @Return java.lang.String
     **/
    private String getValue(String key) {
        String systemProperty = System.getProperty(key);
        if (systemProperty != null) {
            return systemProperty;
        }
        if (properties.containsKey(key)) {
            return properties.getProperty(key);
        }
        return "";
    }

    /**
     * @Description 取出String類型的Property,但以System的Property優先,若是都爲Null則拋出異常.
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     * @Param [key]
     * @Return java.lang.String
     **/
    public String getProperty(String key) {
        String value = getValue(key);
        if (value == null) {
            throw new NoSuchElementException();
        }
        return value;
    }

    /**
     * @Description 載入多個文件, 文件路徑使用Spring Resource格式.
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     * @Param [resourcesPaths]
     * @Return java.util.Properties
     **/
    private Properties loadProperties(String... resourcesPaths) {
        Properties props = new Properties();

        for (String location : resourcesPaths) {
            log.debug("Loading properties file from:" + location);
            InputStream is = null;
            try {
                Resource resource = resourceLoader.getResource(location);
                is = resource.getInputStream();
                props.load(is);
            } catch (IOException ex) {
                log.info("Could not load properties from path:" + location + ", " + ex.getMessage());
            } finally {
                IOUtils.closeQuietly(is);
            }
        }
        return props;
    }
}
PropertiesLoader.java

配置文件工具類:ide

package com.sxy.propertiesreaddemo.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;

/**
 * @Description 讀取配置文件
 * @Author SuXingYong
 * @Date 2020/7/11 20:55
 **/
@Slf4j
public class PropertiesUtils {

    /**
     * @Description 獲取配置文件加載
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     * @Param [configPath]
     * @param configPath  配置文件路徑
     * @Return com.sxy.platform.properties.PropertiesLoader
     **/
    public static PropertiesLoader getProperties(String configPath) {
        PropertiesLoader property=new PropertiesLoader(configPath);
        return property;
    }

    /**
     * @Description 根據key獲取value
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     * @Param [key, properties]
     * @Return java.lang.String
     **/
    public static String getPropertyValue(String key, PropertiesLoader properties) {
        String value = properties.getProperty(key);
        return value;
    }
}
PropertiesUtils.java

配置文件統一對外調用類:spring-boot

package com.sxy.propertiesreaddemo.utils;

/**
 * @Description config配置文件讀取類
 * @By SuXingYong
 * @DateTime 2020/7/11 20:55
 **/
public class PropertyConfigValue {

    /**
     * 配置加載器
     */
    private static PropertiesLoader propertiesLoader;
    
    /**
     * @Description 自定義配置內容
     * @Author SuXingYong
     * @Date 2020/7/11 20:55
     **/
    private static String THIS_CUSTOM_CONFIG_CONTENT = "this.custom.config.content";


    static {
        propertiesLoader = PropertiesUtils.getProperties("classpath:config/custom-config.properties");
    }

    /**
     * @Description 獲取 自定義配置內容
     * @Author SuXingYong
     * @Date 2020/6/24 15:10
     * @Param []
     * @Return java.lang.String
     **/
    public static String getThisCustomConfigContent(){
        String value = PropertiesUtils.getPropertyValue(THIS_CUSTOM_CONFIG_CONTENT, propertiesLoader);
        return value;
    }
}
PropertyConfigValue.java

springboot項目啓動類:工具

package com.sxy.propertiesreaddemo;

import com.sxy.propertiesreaddemo.utils.PropertyConfigValue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@Slf4j
@SpringBootApplication
public class PropertiesReadDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(PropertiesReadDemoApplication.class, args);
        log.info("this.custom.config.content = "+ PropertyConfigValue.getThisCustomConfigContent());
    }

}
PropertiesReadDemoApplication.java

 運行結果:ui

相關文章
相關標籤/搜索