spring通过@Profile解决环境变量的问题
时间:2022-07-25
本文章向大家介绍spring通过@Profile解决环境变量的问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背景
在profile推出之前,通过不同系统的环境变量切换,通过一些手动或者写死的方法进行切换非常费时费力,而且有些系统来回几套系统在切换的时候经常性出现各种问题...
spring @profile解决什么问题?
spring profile是Spring Framework 3.1以后推出一个解决切换环境变量的注解。主要解决一个环境问题切换的问题,其原理就是通过spring di在注入的时候通过环境变量来判断注入相应的环变量,以达到减少配置问题引起的各种麻烦。
个人理解:就是通过环境变量中的不同值来判断是正式环境、测试环境、开发环境、本地环境等。
源码实现:
/**
* @Auther: csh
* @Date: 2020/7/10 15:18
* @Description:系统环境
*/
public class SystemConfig {
private String systemInfo;
public SystemConfig(String systemInfo) {
this.systemInfo = systemInfo;
}
public String getSystemInfo() {
return systemInfo;
}
public void setSystemInfo(String systemInfo) {
this.systemInfo = systemInfo;
}
}
/**
* @Auther: csh
* @Date: 2020/7/10 15:20
* @Description:环境配置
*/
@Configuration
public class EnvironmentConfig {
@Profile("dev")
@Bean
public SystemConfig getTest(){
return new SystemConfig("dev222222");
}
@Profile("idc")
@Bean
public SystemConfig getIDC(){
return new SystemConfig("idc2222222222");
}
}
/**
* @Auther: csh
* @Date: 2020/7/10 10:43
* @Description:
*/
public class ProfileTest {
public static void main(String[] args) {
//从类路径的xm文件载入上下文定义的信息
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
System.out.println("context 已启动!");
context.getEnvironment().setActiveProfiles("idc");
//注册主配置类
context.register(EnvironmentConfig.class);
context.refresh();
SystemConfig bean = context.getBean(SystemConfig.class);
System.out.println(bean.getSystemInfo());
AnnotationConfigApplicationContext context2 = new AnnotationConfigApplicationContext();
context2.getEnvironment().setActiveProfiles("dev");
//注册主配置类
context2.register(EnvironmentConfig.class);
context2.refresh();
SystemConfig bean2 = context2.getBean(SystemConfig.class);
System.out.println(bean2.getSystemInfo());
}
}
context 已启动!
七月 10, 2020 3:24:13 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@37bba400: startup date [Fri Jul 10 15:24:13 CST 2020]; root of context hierarchy
idc
七月 10, 2020 3:24:14 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7dc222ae: startup date [Fri Jul 10 15:24:14 CST 2020]; root of context hierarchy
dev
context 已启动!
七月 10, 2020 3:25:04 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@37bba400: startup date [Fri Jul 10 15:25:04 CST 2020]; root of context hierarchy
idc2222222222
七月 10, 2020 3:25:04 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7dc222ae: startup date [Fri Jul 10 15:25:04 CST 2020]; root of context hierarchy
dev222222
当然也可以通过jvm来进行配置
/**
* @Auther: csh
* @Date: 2020/7/10 10:43
* @Description:profile测试
*/
public class ProfileTest {
public static void main(String[] args) {
//从类路径的xm文件载入上下文定义的信息
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
System.out.println("context 已启动!");
// context.getEnvironment().setActiveProfiles("idc");
//注册主配置类
context.register(EnvironmentConfig.class);
context.refresh();
SystemConfig bean = context.getBean(SystemConfig.class);
System.out.println(bean.getSystemInfo());
AnnotationConfigApplicationContext context2 = new AnnotationConfigApplicationContext();
// context2.getEnvironment().setActiveProfiles("dev");
//注册主配置类
context2.register(EnvironmentConfig.class);
context2.refresh();
SystemConfig bean2 = context2.getBean(SystemConfig.class);
System.out.println(bean2.getSystemInfo());
}
}
context 已启动!
七月 10, 2020 3:30:44 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@37bba400: startup date [Fri Jul 10 15:30:44 CST 2020]; root of context hierarchy
idc2222222222
七月 10, 2020 3:30:44 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6483f5ae: startup date [Fri Jul 10 15:30:44 CST 2020]; root of context hierarchy
idc2222222222
注:
org.springframework.core.env.ConfigurableEnvironment#setActiveProfiles的等级优于VM options
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
参考文章:
https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile
https://blog.csdn.net/weixin_43950568/article/details/104256427?ops_request_misc=&request_id=&biz_id=102&utm_term=@Profile&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-104256427
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- [安装文档]Oracle 12c 单节点安装之安装前准备
- Oracle基本参数(NLS_LANGUAGE)
- Oracle基本参数(NLS_TERRITORY)
- C# 探测器测试系统
- Panuon.UI.Silver使用和介绍
- Oracle基本参数(OPEN_CURSORS)
- Oracle基本参数(PROCESSES)
- C# 中的多态性
- Oracle基本参数(REMOTE_LISTENER)
- C#基于yolov3的行人检测
- yolov3和yolov4检测效果对比
- Oracle基本参数(REMOTE_LOGIN_PASSWORDFILE)
- VS2017中运行MySQL的存储过程
- C#各种定时器Timer类的区别与使用介绍
- json使用实例二