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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>