将参数配置在配置文件中,避免反复修改代码

package com.nuoya.zzx.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class ConfigUtil {
    private static Properties props = new Properties();

    public ConfigUtil() {
    }

    public static String getValue(String key) {
        return props.getProperty(key);
    }

    public static void updateProperties(String key, String value) {
        props.setProperty(key, value);
    }

    static {
        try {
            props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
        } catch (FileNotFoundException var1) {
            var1.printStackTrace();
        } catch (IOException var2) {
            var2.printStackTrace();
        }

    }
}

引入配置文件

<bean id="configProperties"  
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="ignoreResourceNotFound" value="true" /> 
        <property name="locations">  
        <array>  
            <value>classpath:jdbc.properties</value>  
            <value>classpath:redis.properties</value>  
            <value>classpath:log4j.properties</value>  
            <value>classpath:config.properties</value>  
        </array>  
    	</property>
        <property name="propertiesPersister">
            <bean class="com.nuoya.zzx.plugins.Aes256.AES256PropertiesPersister" />
        </property>
    </bean> 
    

config.properties

key=字符串

在程序中使用

key = ConfigUtil.getValue("key");

使用以上工具可调用配置文件中的配置信息在程序中使用,不必反复修改java代码

PropertiesUtil.getString("FileSuffixs")
这个和configUtil效果等同


或者使用

 @Value("#{configProperties['key']}")
    private String key;
亦可以达到同样的目的


过程中遇到取值为null的情况

在spring mvc架构中,如果希望在程序中直接使用properties中定义的配置值,通常使用一下方式来获取:

    @Value("${tag}")
    private String tagValue;

但是取值时,有时这个tagvalue为NULL,可能原因有:

  • 使用static或final修饰了tagValue,如下:
    private static String tagValue;  //错误
    private final String tagValue;    //错误
  • 类没有加上@Component(或者@service等)
    @Component   //遗漏
    class TestValue{
         @Value("${tag}")
         private String tagValue;
    }
  • 类被new新建了实例,而没有使用@Autowired
    @Component   
    class TestValue{
         @Value("${tag}")
         private String tagValue;
    }

    class Test{
        ...
        TestValue testValue = new TestValue()
    }

这个testValue中肯定是取不到值的,必须使用@Autowired:

class Test{
        @AutoWired
        TestValue testValue
    }

阅读更多
文章标签: 文件配置
个人分类: 工具
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭