springboot普通类获取当前环境,判断当前是否为开发环境,手动获取bean,手动获取配置值,获取当前请求
java后端判断当前环境是生产环境还是开发环境的方式不少,比如通过main方法的调试参数来区分。这里我通过判断springboot激活的配置文件后缀来区分,首先介绍如何根据应用环境不同激活不同后缀的配置文件。
1:新建2个配置文件分别是开发环境(dev)配置与生成环境(prod)配置:
2:在主配置文件application.yml中声明默认启用的配置文件:
启动应用时如果需要指定生产环境在启动命令后加上 --spring.profiles.active=prod即可(如:java -Xms100m -jar xx.war --spring.profiles.active=prod &)。
以上就是springboot便捷切换配置文件,接着我们看代码中如何判断当前的环境。
1:编写一个类用来保存springboot应用上下文对象的引用,此类也可用来在非spring管理类下获取springBean。
2:在springboot启动类的main方法中将spring上下文对象set进我们新建的类
3:保存上下文对象的同时拿到我们激活的配置文件后缀名
4:拿到了激活的配置文件后缀,基本就完成了,我们可以基于此写一个判断当前是否为开发环境的方法:
完整代码,附带手动获取bean,手动获取配置值,获取当前请求:
public class SpringUtil {
private static ApplicationContext applicationContext;
//0-2表示开发,测试,生产环境
private static byte environ = 0;
public static void setApplicationContext(ApplicationContext context) {
SpringUtil.applicationContext = context;
//获取当前的系统环境
Environment evn = applicationContext.getEnvironment();
String[] activeProfiles = evn.getActiveProfiles();
for (String profile : activeProfiles) {
if ("dev".equals(profile)){
break;
} else if ("test".equals(profile)){
environ = 1;
break;
} else if ("prod".equals(profile)){
environ = 2;
break;
}
}
callbackAfterRunning();
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//获取配置文件配置值
public static String getEvnProperty(String key){
return applicationContext.getEnvironment().getProperty(key);
}
//通过bean名称获取bean
public static Object getBeanByName(String name){
try {
return getApplicationContext().getBean(name);
} catch (Exception e){
return null;
}
}
public static Object getBeanByClassName(String className){
try{
Class aClass = Class.forName(className);
Object obj = getApplicationContext().getBean(aClass);
return obj;
}catch(Exception ex){
return null;
}
}
public static <T> T getBean(Class<T> clazz) {
if (SpringUtil.applicationContext == null) {
return null;
}
try {
return SpringUtil.applicationContext.getBean(clazz);
} catch (Exception e){
return null;
}
}
//当前是否为开发环境
public static boolean isDev() {
return environ == 0;
}
//是否为测试环境
public static boolean isTest(){
return environ == 1;
}
//是否为生产环境
public static boolean isProd(){
return environ == 2;
}
///获取当前环境
public static byte getEnviron(){
return environ;
}
//获取当前请求
public static HttpServletRequest currentRequest(){
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return servletRequestAttributes.getRequest();
}
private static void callbackAfterRunning(){
TimeZone.setDefault( TimeZone.getTimeZone("Asia/Shanghai") );
}
}
该方式判断环境也是有一定局限性,只能在spring项目中使用。
版权声明:本文为qq_41633199原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。