LocalData优化升级

master
wangbing 4 years ago
parent 42f057e954
commit 56ddf931d8

@ -24,6 +24,6 @@ public class Application extends SpringBootServletInitializer {
} }
public static void main(String[] args) { public static void main(String[] args) {
LocalData.setApplicationContext(SpringApplication.run(Application.class, args)); LocalData.init(SpringApplication.run(Application.class, args), args);
} }
} }

@ -5,9 +5,13 @@ import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import ${domain}.frame.utils.PropertiesUtil;
import ${domain}.frame.utils.StringUtil;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* LocalData - * LocalData -
@ -18,6 +22,8 @@ import javax.servlet.http.HttpServletResponse;
*/ */
public class LocalData { public class LocalData {
private static String[] applicationArgs = null;
private static ApplicationContext applicationContext = null; private static ApplicationContext applicationContext = null;
private static Token system = null; private static Token system = null;
@ -60,8 +66,18 @@ public class LocalData {
return LocalData.applicationContext; return LocalData.applicationContext;
} }
public static void setApplicationContext(ApplicationContext applicationContext) { public static void init(ApplicationContext context, String[] args) {
LocalData.applicationContext = applicationContext; LocalData.applicationContext = context;
LocalData.applicationArgs = args;
}
/**
*
*
* @return
*/
public static boolean isInited() {
return LocalData.applicationContext != null;
} }
public static <T> T getBean(Class<T> t) { public static <T> T getBean(Class<T> t) {
@ -79,12 +95,59 @@ public class LocalData {
return getBean(Environment.class); return getBean(Environment.class);
} }
public static String getProperty(String key, String defaultValue) {
Environment environment = getEnvironment();
if (environment != null) {
return environment.getProperty(key, defaultValue);
} else {
String active = LocalData.getActive();
if (StringUtil.isEmpty(active)) {
return PropertiesUtil.getProp("application.properties", key, defaultValue);
} else {
return PropertiesUtil.getProp("application-" + active + ".properties", key, defaultValue);
}
}
}
public static String getActive() { public static String getActive() {
String[] profiles = getEnvironment().getActiveProfiles(); // 当上下文初始化已完成后优先使用SpringBoot内存参数
return String.join(",", profiles); Environment environment = getEnvironment();
if (environment != null) {
return environment.getProperty("spring.profiles.active", "");
}
String active = "";
// 1命令行环境 --spring.profiles.active=dev
if (applicationArgs != null) {
Pattern compile = Pattern.compile("--spring\\.profiles\\.active=(.*)");
for (String arg : applicationArgs) {
Matcher matcher = compile.matcher(arg);
if (matcher.find()) {
active = matcher.group(1);
}
}
if (StringUtil.isNotEmpty(active)) {
return active;
}
}
// 2Java系统属性 -Dspring.profiles.active=dev
active = System.getProperty("spring.profiles.active");
if (StringUtil.isNotEmpty(active)) {
return active;
}
// 3操作系统环境变量 SPRING_PROFILES_ACTIVE=dev
active = System.getenv("SPRING_PROFILES_ACTIVE");
if (StringUtil.isNotEmpty(active)) {
return active;
}
// 4配置文件 spring.profiles.active=dev
return PropertiesUtil.getProp("application.properties", "spring.profiles.active", "");
} }
public static String getContext() { public static String getContext() {
return getRequest().getContextPath(); return getRequest().getContextPath();
} }
} }

@ -0,0 +1,54 @@
package ${domain}.frame.utils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
*
*
* @author wangbing
* @version 0.0.1
* @since 2020-11-10
*/
public class PropertiesUtil {
/**
*
*/
private static Map<String, Properties> propertiesMap = new HashMap<>();
/**
* @param name
* @param key
* @param defaultValue
* @return
*/
public static String getProp(String name, String key, String defaultValue) {
Properties properties = propertiesMap.get(name);
if (properties == null) {
try {
properties = new Properties();
properties.load(ResourceUtil.getInput(name));
propertiesMap.put(name, properties);
} catch (IOException ignored) {
}
}
if (properties == null) {
return "";
}
return properties.getProperty(key, defaultValue);
}
public static String getProp(String name, String key) {
return getProp(name, key);
}
public static int getPropInt(String name, String key, int defaultValue) {
String prop = getProp(name, key, String.valueOf(defaultValue));
// 这边对值不做容错处理预防因为容错出现难以查找的BUG
return Integer.parseInt(prop);
}
}

@ -17,7 +17,7 @@ public class TestConfig {
@PostConstruct @PostConstruct
public void initLocalData() { public void initLocalData() {
LocalData.setApplicationContext(applicationContext); LocalData.init(applicationContext,new String[]{});
} }
@Bean @Bean

Loading…
Cancel
Save

Powered by TurnKey Linux.