1、背景
我们在java编程时,经常需要使用到pom.xml中的变量,本文稍微记录。
2、读属性
1)
java代码中,spring框架获取属性,是获取资源文件夹
下的配置,直接写在pom中是不行的。
在constant.properties
中写:
# queue name
job.queuename=${job.queuename}
pom中有对应的值:
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<job.queuename>abc</job.queuename>
...
这样才能识别。
2)自己实现
如果不用框架自己实现一个属性文件,可以将constant.properties
放到map中,再取出来。
public class PropertyFile {
private static Logger logger_sys = LoggerFactory.getLogger("system");
private static final Map<String, String> constontMap = new ConcurrentHashMap<String, String>();
static {
loadFile();
}
public static void loadFile() {
InputStream in = null;
try {
File file = new File(PropertyFile.class.getResource("/constant.properties").toURI().getPath());
if (!file.exists()) {
System.out.println("constant.properties-----------------------------file not exist.");
System.exit(0);
}
Properties prop = new Properties();
//读取属性文件a.properties
in = new BufferedInputStream(new FileInputStream(file));
prop.load(in); ///加载属性列表
Iterator<String> it = prop.stringPropertyNames().iterator();
while (it.hasNext()) {
String key = it.next();
constontMap.put(key, prop.getProperty(key));
}
for (String key : constontMap.keySet()) {
if (key != null) {
logger_sys.info(key + "-----" + constontMap.get(key));
}
}
} catch (Exception e) {
logger_sys.error(e.getMessage());
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
in = null;
}
}
}
}
public static String getPropertyByName(String propertyName) {
return constontMap.get(propertyName);
}
public static String getPropertyByLink(String from, String to, String propertyName) {
if (constontMap.containsKey(propertyName + "." + from + "." + to)) {
return constontMap.get(propertyName + "." + from + "." + to);
}
return constontMap.get(propertyName);
}
}
使用的时候取出来:
String xxx = PropertyFile.getPropertyByName("xxx");
此处,加载文件写在静态代码块中,会先加载。(进一步研究)