Spring.profile实现开发、测试和生产环境的配置和切换
Spring.profile实现开发、测试和生产环境的配置和切换
软件开发过程一般涉及“开发 -> 测试 -> 部署上线”多个阶段,每个阶段的环境的配置参数会有不同,如数据源,文件路径等。为避免每次切换环境时都要进行参数配置等繁琐的操作,可以通过spring的profile功能来进行配置参数的切换。
以我用到的项目的实际情况为例,首先可以在resources文件夹下分别为每个环境建立单独的文件夹(也可以额外建立一个common文件夹,用于存放公共的参数配置文件),每个文件夹下面存放对应的环境所需的配置文件,就像这样子:
在resources文件夹下建立applicationContext-profile.xml文件,用来定义不同的profile:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"><description>spring profile配置</description><!-- 开发环境配置文件 --><beans profile="development"><context:property-placeholderlocation="classpath*:common/*.properties, classpath*:development/*.properties" /></beans><!-- 测试环境配置文件 --><beans profile="test"><context:property-placeholderlocation="classpath*:common/*.properties, classpath*:test/*.properties" /></beans><!-- 生产环境配置文件 --><beans profile="production"><context:property-placeholderlocation="classpath*:common/*.properties, classpath*:production/*.properties" /></beans></beans>
这样就实现了通过profile标记不同的环境,接下来就可以通过设置spring.profiles.default和spring.profiles.active这两个属性来激活和使用对应的配置文件。default为默认,如果没有通过active来指定,那么就默认使用default定义的环境。
这两个属性可以通过多种方法来设置:
- 在web.xml中作为web应用的上下文参数context-param;
- 在web.xml中作为DispatcherServlet的初始化参数;
- 作为JNDI条目;
- 作为环境变量;
- 作为JVM的系统属性;
- 在集成测试类上,使用@ActiveProfiles注解配置。
前两者都可以在web.xml文件中设置:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/applicationContext*.xml</param-value></context-param><!-- 在上下文context-param中设置profile.default的默认值 --><context-param><param-name>spring.profiles.default</param-name><param-value>development</param-value></context-param><!-- 在上下文context-param中设置profile.active的默认值 --><!-- 设置active后default失效,web启动时会加载对应的环境信息 --><context-param><param-name>spring.profiles.active</param-name><param-value>development</param-value></context-param><servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 在DispatcherServlet参数中设置profile的默认值,active同理 --><init-param><param-name>spring.profiles.default</param-name><param-value>development</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>appServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
激活指定的环境,也可以通过JVM参数来设置,可以在tomcat的启动脚本中加入以下JVM参数来激活:
-Dspring.profiles.active="production"
在程序中,也可以通过 @Profile("...") 对某些资源进行注解,这样只有当选择对应的环境时,才会产生对应的bean,如:
@Bean @Profile("production") public DataSource jndiDataSource(){JndiObjectFactoryBean jofb=new JndiObjectFactoryBean();jofb.setJndiName("jndi/iDS");jofb.setResourceRef(true);jofb.setProxyInterface(xxx.class);return (DataSource) jofb.getObject();} }
参考:
1. Spring-profile设置
2. 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
转载于:https://www.cnblogs.com/handsome1013/p/7447121.html
Spring.profile实现开发、测试和生产环境的配置和切换相关推荐
- Spring Boot通过配置文件区分测试和生产环境
Spring Boot通过配置文件区分测试和生产环境 方法一:我们定义三个配置文件,一个是开发,我们定位为:application-dev.yml,另一个是生产,我们定义为application-pr ...
- [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST
[配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST process.env是什么? process.env 是 Node.js 中的一个环境对象.其 ...
- 为什么eolinker发送老是等待_eolinker环境管理之开发、测试和生产环境
在开发的过程中,不可避免会接触到至少三个环境的程序部署:开发.测试和生产环境. 可能在每个环境都使用一套数据库配置,路径配置等,如果每次都人工的干预每一个配置文件,工作会比较繁杂,且容易遗漏并且出错. ...
- vue配置开发、测试、生产环境(proxy中获取process.env.NODE_ENV)
先是看了这个文章写的如何npm run build 的时候自动配置地址 参考文章"vue配置开发.测试.生产环境(不同环境,不同命令)_Amy_cloud的博客-CSDN博客_vue生产环境 ...
- 环境管理:开发、测试和生产环境
在开发的过程中,不可避免会接触到至少三个环境的程序部署:开发.测试和生产环境.可能在每个环境都使用一套数据库配置,路径配置等,如果每次都人工的干预每一个配置文件,工作会比较繁杂,且容易遗漏并且出错.这 ...
- uni-app h5打包发版到测试和生产环境具体步骤
前言: 最近需要在uniapp项目上修改需求,完成后需要将页面打包出来,生成h5静态文件,然后部署到测试和生产环境,这里总结下我的具体操作步骤 步骤: 测试域名打开,因为我项目里测试域名都是test. ...
- Django开发环境与生产环境的配置
项目实际开发过程中需要区分开发环境与生产环境 获取环境数值 ENV_PROFILE = os.getenv("ENV") 通过获取到的ENV_PROFILE来区别开发环境与生产环境 ...
- Elasticsearch-32.生产环境常用配置与上线清单 he 集群写性能优化 he 集群读性能优化
Elasticsearch 生产环境常用配置和上线清单 Development vs.Production Mode 从ES 5开始,支持Development 和Production 两种运行模式 ...
- Hadoop--Yarn常用命令 与 生产环境核心配置参数
写目录 Yarn常用命令 1. yarn application查看任务 2. yarn logs查看日志 3. yarn applicationattermpt查看尝试运行的任务 4. yarn c ...
- CC00042.CloudKubernetes——|KuberNetes二进制部署.V20|5台Server|——|kubernetes配置|生产环境关键性配置|
一.生产环境关键性配置 ### --- docker参数配置--所有节点 ~~~ docker参数:所有节点都需要更改.[root@k8s-master01 ~]# vim /etc/docker/d ...
最新文章
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 构造函数分析 | makeDexElements 函数分析 )
- C++中随机函数rand()和srand()的用法
- Python面试中需要注意的几点事项!
- go 原子操作 atomic
- Servlet体系结构
- Microsoft Dynamics CRM 前瑞开发
- 一时冲动:“通往瓦尔哈拉之路的冒险”
- HDU Integer's Power(容斥原理)
- Mysql配置参数常见问题
- (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
- 二进制的原码,反码,补码
- 设计模式原则之三:接口隔离原则
- hive和mysql传输数据类型_hive的数据类型
- C# Web服务器控件FileUpload()上传文件
- 一篇教你随意下载网易云音乐歌曲的博客!
- python md5加密字符串_Python使用MD5加密字符串示例
- js让html转excel时间格式,js读取excel中日期格式转换问题
- 郭天祥 10天搞定单片机 (3)数码管+中断
- halcon 缺陷检测 药片检测(有无)
- 域名注册查询批量筛选工具
热门文章
- dotnetbar 5.8.0.3
- keyphrase抽取论文在聊什么?
- 一作解读NLPCC最佳学生论文:1200万中文对话数据和预训练模型CDial-GPT
- 【工大SCIR Lab】AAAI20 基于关键词注意力机制和回复弱监督的医疗对话槽填充研究...
- 【Linux】用户必须知道的常用终端快捷键
- 【为书豪相亲】单身小姐姐你在哪里,我是书豪,我在等你
- 调参心得:超参数优化之旅
- 数据科学包13-实例2:时间事件日志
- python---python3 获取当前路径及os.path.dirname的使用;os.path.abspath(__file__)用法及意义
- 达观杯文本智能处理(4)