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实现开发、测试和生产环境的配置和切换相关推荐

  1. Spring Boot通过配置文件区分测试和生产环境

    Spring Boot通过配置文件区分测试和生产环境 方法一:我们定义三个配置文件,一个是开发,我们定位为:application-dev.yml,另一个是生产,我们定义为application-pr ...

  2. [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST

    [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST process.env是什么? process.env 是 Node.js 中的一个环境对象.其 ...

  3. 为什么eolinker发送老是等待_eolinker环境管理之开发、测试和生产环境

    在开发的过程中,不可避免会接触到至少三个环境的程序部署:开发.测试和生产环境. 可能在每个环境都使用一套数据库配置,路径配置等,如果每次都人工的干预每一个配置文件,工作会比较繁杂,且容易遗漏并且出错. ...

  4. vue配置开发、测试、生产环境(proxy中获取process.env.NODE_ENV)

    先是看了这个文章写的如何npm run build 的时候自动配置地址 参考文章"vue配置开发.测试.生产环境(不同环境,不同命令)_Amy_cloud的博客-CSDN博客_vue生产环境 ...

  5. 环境管理:开发、测试和生产环境

    在开发的过程中,不可避免会接触到至少三个环境的程序部署:开发.测试和生产环境.可能在每个环境都使用一套数据库配置,路径配置等,如果每次都人工的干预每一个配置文件,工作会比较繁杂,且容易遗漏并且出错.这 ...

  6. uni-app h5打包发版到测试和生产环境具体步骤

    前言: 最近需要在uniapp项目上修改需求,完成后需要将页面打包出来,生成h5静态文件,然后部署到测试和生产环境,这里总结下我的具体操作步骤 步骤: 测试域名打开,因为我项目里测试域名都是test. ...

  7. Django开发环境与生产环境的配置

    项目实际开发过程中需要区分开发环境与生产环境 获取环境数值 ENV_PROFILE = os.getenv("ENV") 通过获取到的ENV_PROFILE来区别开发环境与生产环境 ...

  8. Elasticsearch-32.生产环境常用配置与上线清单 he 集群写性能优化 he 集群读性能优化

    Elasticsearch 生产环境常用配置和上线清单 Development vs.Production Mode 从ES 5开始,支持Development 和Production 两种运行模式 ...

  9. Hadoop--Yarn常用命令 与 生产环境核心配置参数

    写目录 Yarn常用命令 1. yarn application查看任务 2. yarn logs查看日志 3. yarn applicationattermpt查看尝试运行的任务 4. yarn c ...

  10. CC00042.CloudKubernetes——|KuberNetes二进制部署.V20|5台Server|——|kubernetes配置|生产环境关键性配置|

    一.生产环境关键性配置 ### --- docker参数配置--所有节点 ~~~ docker参数:所有节点都需要更改.[root@k8s-master01 ~]# vim /etc/docker/d ...

最新文章

  1. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 构造函数分析 | makeDexElements 函数分析 )
  2. C++中随机函数rand()和srand()的用法
  3. Python面试中需要注意的几点事项!
  4. go 原子操作 atomic
  5. Servlet体系结构
  6. Microsoft Dynamics CRM 前瑞开发
  7. 一时冲动:“通往瓦尔哈拉之路的冒险”
  8. HDU Integer's Power(容斥原理)
  9. Mysql配置参数常见问题
  10. (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
  11. 二进制的原码,反码,补码
  12. 设计模式原则之三:接口隔离原则
  13. hive和mysql传输数据类型_hive的数据类型
  14. C# Web服务器控件FileUpload()上传文件
  15. 一篇教你随意下载网易云音乐歌曲的博客!
  16. python md5加密字符串_Python使用MD5加密字符串示例
  17. js让html转excel时间格式,js读取excel中日期格式转换问题
  18. 郭天祥 10天搞定单片机 (3)数码管+中断
  19. halcon 缺陷检测 药片检测(有无)
  20. 域名注册查询批量筛选工具

热门文章

  1. dotnetbar 5.8.0.3
  2. keyphrase抽取论文在聊什么?
  3. 一作解读NLPCC最佳学生论文:1200万中文对话数据和预训练模型CDial-GPT
  4. 【工大SCIR Lab】AAAI20 基于关键词注意力机制和回复弱监督的医疗对话槽填充研究...
  5. 【Linux】用户必须知道的常用终端快捷键
  6. 【为书豪相亲】单身小姐姐你在哪里,我是书豪,我在等你
  7. 调参心得:超参数优化之旅
  8. 数据科学包13-实例2:时间事件日志
  9. python---python3 获取当前路径及os.path.dirname的使用;os.path.abspath(__file__)用法及意义
  10. 达观杯文本智能处理(4)