spring mvc多环境下配置文件的设置
在实际开发时经常需要把一些配置信息写在配置文件,比如mysql的主机地址、端口号、用户名和密码等。另外,在开发代码时可能用一套配置参数,而部署到测试环境时又会用另一套配置参数,测试完毕再部署到线上环境时,又需要使用线上环境下的另一套参数。因此,实际开发中面临着如何给工程添加多个环境下的配置文件、且要保证不同环境下能自动使用不同的配置文件的问题。
spring提供了spring.profiles.active参数,通常情况下,这个值我们会设置为dev、test和online中的一个,分别代表开发环境、测试环境和线上生产环境。比如当spring.profiles.active的值为dev时,表示当前运行于开发环境下,应当使用开发环境下的配置文件。
通过在运行程序时给spring.profiles.active参数传入不同的值以选择不同的配置文件。这样只需要打包一次,不必为不同的环境各打包一次了。
下面来演示如何在运行阶段选择配置文件。在上一篇的工程的基础上进行修改(或者先将上面的工程恢复成最初的样子)。
首先在resoures目录下创建4个配置文件,分别为application.properties、application-dev.properties、application-test.properties和application-online.properties。其中application.properties文件里存放的是所有环境下都通用的配置信息,另外3个则分别对应开发环境、测试环境和线上环境的配置:
因为配置文件要到工程运行时才会进行选择,因此,所有的配置文件都是需要打包到项目中的。先在3个环境下都通用的application.properties文件中加入一个配置项,参数为city.name,值为beijing:
city.name=beijing
和前面的例子一样,dev、test和online环境的配置文件都配置了一个名为env.name的参数,值分别为env-dev、env-test和env-online。
接下来修改spring.xml,增加如下一行配置如下:
<context:property-placeholder location="classpath:application.properties, classpath:application-${spring.profiles.active}.properties"/>
这一行是告诉spring容器去哪加载配置文件。这里添加了两个配置文件,一个是所有环境都通用的application.properties文件,另一个则取决于spring.profiles.active参数的值是多少,如果是dev(即开发环境),则是application-dev.properties文件;同理,如果是test(测试环境)则是application-test.properties文件;如果是online(线上环境)则是application-online.properties文件。
为了观察配置的效果,修改HelloServiceImpl文件的内容如下:
package com.mytest.service.impl; import com.mytest.service.HelloService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; @Service
public class HelloServiceImpl implements HelloService { @Value("${env.name}")
private String envName; @Value("${city.name}")
private String cityName; @Override
public String sayHello(String to) {
return "hello " + to + ", env.name:" + envName + ", cityName:" + cityName;
}
}
HelloServiceImpl除了引用了配置文件中的env.name参数外,还引用了通用配置文件中的city.name参数。
接下在maven命令行中执行如下命令构建整个工程:
clean package
这里构建时没有再传入任何参数了。
接下来将打包好的mvc-test-1.0-SNAPSHOT.war文件拷贝到tomcat的webapps目录下,并改名为mvc-test.war。
运行时进行配置文件的选择,其原理就是在用java命令执行java程序时传入给spring.profiles.active参数不同的值,比如:
java xxx -Dspring.profiles.active=dev
这样就在启动程序时就把spring.profiles.active参数的设置为dev了。
因为tomcat是我们通常是用它自身bin目录下的catalina.sh脚本来启动的,所以我们把启动参数写到这个脚本里。打开catalina.sh脚本,搜索到如下行:
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
将其改成:
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Dspring.profiles.active=dev"
表示现在是开发环境。保存并退出,然后在tomcat的bin目录下执行以下命令以启动tomcat:
sh ./catalina.sh run
然后在浏览器中输入http://localhost:8080/mvc-test/hello?name=tom,回车即可看到结果:
可以看到,程序正确地选择了开发环境下的配置文件。
用同样的方法,将spring.profiles.active设置为test,并重新启动tomcat,在浏览器中访问,可以看到程序正确地选择了测试环境下的配置文件:
将spring.profiles.active设置为online,并重新启动tomcat,在浏览器中访问,可以看到程序正确地选择了线上环境的配置文件:
我们再看下tomcat的webapps目录下,mvc-test的目录结构:
可以看到所有的配置文件都打包到WEB-INF/classes目录下了,因为是运行时才选择配置文件,所以所有的配置文件都要打包过来。
综上,可以将所有环境都通用的配置信息写入到application.properties文件中,而不同运行环境下不同的配置信息则分别写入到application-dev.properties、application-test.properties和application-online.properties文件中,再通过运行程序时给sring.profiles.active参数传入不同的值(dev或test或online)即可完成不同运行环境下选择不同的配置文件的功能。
spring mvc多环境下配置文件的设置的更多相关文章
- MyBatis在非Spring环境下第三方DataSource设置-Druid篇
首先在ITEye上面看到一个同标题文章,在此说明,此文并非转载自 http://iintothewind.iteye.com/blog/2069522 ,因为这篇文章根本就是错误的,照着上面做,工程可 ...
- Spring+Spring MVC+Hibernate环境搭配
Spring+Spring MVC+Hibernate简称"SSH".Spring容器是Spring的核心,该 容器负责管理spring中的java组件.Spring的核心机制:依 ...
- QT在linux环境下读取和设置系统时间(通过system来直接调用Linux命令,注意权限问题)
QT在Linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.NET/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 ...
- SpringBoot利用spring.profiles.active=@spring.active@不同环境下灵活切换配置文件
一.创建配置文件 配置文件结构:这里建三个配置文件,application.yml作为主配置文件配置所有共同的配置:-dev和-local分别配置两种环境下的不同配置内容,如数据库地址等. appli ...
- Mybatis在非spring环境下配置文件中使用外部数据源(druidDatasource)
Spring环境下, MyBatis可以通过其本身的增强mybatis-spring提供的org.mybatis.spring.SqlSessionFactoryBean来注入第三方DataSourc ...
- 使用IntelliJ IDEA 搭建 spring mvc开发环境
填好GroupId.ArtifactId,一路Next创建工程,在main 目录创建 java文件夹并转换为Sources Root,创建好工程目录结构如下: 配置工程 配置 pom.xml,引入相关 ...
- 0052 Spring MVC入门--环境搭建--第一个入门示例
Spring MVC是什么 Spring是一个框架,包括了MVC.IoC.AOP等等组件 MVC是一种思想,并非Spring框架独有,全称是Model.View.Controller,即模型.视图.控 ...
- Spring MVC Maven 环境搭建与部署
本文简单演示了本地开发环境的搭建.项目出包.部署运行.HelloWorld,以及部分注意事项. 起初的玩法:先安装Eclipse,然后分别下载并安装Maven.spring的插件,再进行工程模式转换, ...
- Spring MVC 的环境搭建和入门小程序
1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入spring官网,在网页右边选择想要下载的版本.如图 1.1.2进入页面按Ctrl+F搜索Distribut ...
随机推荐
- python 对象的删除
- ARM 汇编 简单介绍
1. 汇编文件说明 : 汇编文件以 [.s]结尾的文件格式 注释:多行注释 /* */ : 单行注释 @ 2. 符号说明: 1) 汇编指令,一条指令对应一个机器码,完成一定的功能 2) 伪指令, ...
- VBA+SQL transform pivot union联合查询的基础应用
Sub 项目状态查询() '如果“项目状态”是未转运营那么实施状态是不能选择的,因为还没有实施.'如果“项目状态”选择状态后,那么项目名称里面只显示该状态的项目名称.如果“项目状态”选择的不是未转运营 ...
- log4cplus TimeBasedRollingFileAppender
参考自:http://blog.csdn.net/u010607621/article/details/54944696 对于TimeBasedRollingFileAppender 这个日志appe ...
- 使用Thread创建线程
#_author:来童星#date:2019/12/17#使用Thread创建线程import threadingimport timeclass Sunthread(threading.Thread ...
- delphi JPG转为BMP存入数据库
delphi JPG转为BMP存入数据库 必须在uses中引用JPEG procedure TForm1.BitBtn3Click(Sender: TObject);varjpg:TJPEGim ...
- LUOGU P1501 [国家集训队]Tree II (lct)
传送门 解题思路 \(lct\),比较模板的一道题,路径加和乘的维护标记与线段树\(2\)差不多,然后剩下就没啥了.但调了我将近一下午.. 代码 #include<iostream> #i ...
- 暑假集训test-8-31(pm)
以为可以AK,结果t3没有调出来,然后被林巨踩了. everyday被踩,很开心. 林巨真的好巨啊,这么多天已经总计虐我75分了. 1.玩具装箱 第一眼还以为是那道斜率优化dp,结果是个签到水题. / ...
- NX二次开发-UFUN修改当前导出CGM文件选项设置UF_CGM_set_session_export_options
文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...
- hdu多校第九场 1002 (hdu6681) Rikka with Cake 树状数组维护区间和/离散化
题意: 在一块长方形蛋糕上切若干刀,每一刀都是从长方形某条边开始,垂直于这条边,但不切到对边,求把长方形切成了多少块. 题解: 块数=交点数+1 因为对于每个交点,唯一且不重复地对应着一块蛋糕. 就是 ...