关于读入.properties配置文件数据,有很多方法,比如利用ResourceBundle.getString(“”),Property.getProperty(“”).toString(),@Value(“${}”),Environment.get等方法
ResourceBundle
System.setProperty("spring.profiles.active", "dev");//设置classPath下的指定目录
ResourceBundle rb = ResourceBundle.getBundle(classPath下的相对路径);//不用加后缀
BASE_URL = rb.getString("BASE_URL");
很省事不用写后缀,但是在Junit下时,不知名原因,导致加载不成功,也有可能是是Junit版本低造成的,我试到4.9都没成功。。
Properties
Properties prop = new Properties();
String realPath =“.properties”//相对绝对路径都可以,但是要有properties;
String value= prop.getProperty("goopalpayPay_key").toString();
利用这种方法配置环境,在Junit下利用绝对路径(String dir=System.getProperty(“user.dir”);)也能跑通测试,但是每次切换环境时,修改太麻烦。当时考虑用抛异常的方式切换,但是这是不靠谱的。
PropertyPlaceHolder
Environment
利用
@PropertySource(value=”file:绝对路径”)或者@PropertySource(value=”classPath:相对路径”)进行读取
需要事先EvironmentAware接口,重写里面的setEnvironment方法创建Environment对象
@Autowired
Environment env;
在使用的方法中,创建一个ApplicationContext实例,利用他的getEnvironment方法对重写的setEnvironment赋值,然后用getProperty(“xxx”)方法获取properties文件中的数据
@Configuration
@PropertySource(value = "file:E:/dev-chinagpay.properties")
public class Config implements ApplicationListener<ContextRefreshedEvent> ,EnvironmentAware {
@Autowired
private Environment env;
public static void main (String[] args)
{
ApplicationContext ctx = new GenericApplicationContext();
ct.setEnvironment(ctx.getEnvironment());
System.out.println(ct.getProperty("user.dir"));
System.out.println(ct.env);
}
@Override
public void setEnvironment(Environment environment) {
this.env=environment;
}
}
@Value
在applicationContext中配置
这句话的意思是在启动spring时,扫描dev目录下所有的.properties文件,并以key-value的形式存入
在需要使用properties文件中的预设值时,直接采用
[@Value("${xxx}")
private String xxx;](http://blog.csdn.net/tornadowp/article/details/8049548)
进行值的获取与使用