java中獲取環境變量:
STEPS:
1. Try to get environment from JVM system property
m_env = System.getProperty(“env”);
2. Try to get environment from file "server.properties"
m_env = m_serverProperties.getProperty(“env”);
3. Try to get environment from OS environment variable
m_env = System.getenv(“ENV”);
public class EnvUtil {
private static final String SERVER_PROPERTIES_LINUX = "/etc/sys_env.ini";
private static final String SERVER_PROPERTIES_WINDOWS = "C:/opt/settings/server.properties";
private static Properties m_serverProperties = new Properties();
private static String m_env;
private static class LazyHolder{
// final 爲了防止內部誤操作,cglib的代理模式以子類方式實現,可能會修改該值
private static final EnvUtil INSTANCE = new EnvUtil();
}
// 提供靜態方法獲取實例
// final 確保別人不能覆蓋
public static final EnvUtil getInstance() {
return LazyHolder.INSTANCE;
}
private EnvUtil() {
initialize();
}
public String getEnv(){
return m_env;
}
private static void initialize(){
try {
String path = Utils.isOSWindows() ? SERVER_PROPERTIES_WINDOWS : SERVER_PROPERTIES_LINUX;
File file = new File(path);
if (file.exists() && file.canRead()) {
FileInputStream fis = new FileInputStream(file);
initialize(fis);
}else{
initialize(null);
}
} catch (Throwable ex) {
}
}
private static void initialize(InputStream in) {
try {
if (in != null) {
try {
m_serverProperties.load(new InputStreamReader(new BOMInputStream(in), StandardCharsets.UTF_8));
} finally {
in.close();
}
}
initEnvType();
} catch (Throwable ex) {
log.error("獲取系統環境變量錯誤:"+ex.getMessage());
}
}
private static void initEnvType() {
// 1. Try to get environment from JVM system property
m_env = System.getProperty("env");
if (!Utils.isBlank(m_env)) {
m_env = m_env.trim();
return;
}
// 2. Try to get environment from file "server.properties"
m_env = m_serverProperties.getProperty("env");
if (!Utils.isBlank(m_env)) {
m_env = m_env.trim();
return;
}
// 3. Try to get environment from OS environment variable
m_env = System.getenv("ENV");
if (!Utils.isBlank(m_env)) {
m_env = m_env.trim();
return;
}
m_env = null;
// 4. return environment to null.
}
}