SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置
前面的文章已经介绍了CentOS部署SpringBoot项目从0到1的详细过程,包括Linux安装ftp、Tomcat以及Java jdk的全部过程。这篇文章主要介绍关于springboot如何通过多个properties实现数据库环境部署时自动切换配置的两种方式,部署时切换方式和打包时Maven控制方式。
关于springboot基础矿建搭建有疑问的。可以看我之前的一篇文章。详解intellij idea搭建SpringBoot
v环境介绍
正常来讲,一个软件的开发上线的流程大部分都是分为三个环境,依次是开发、测试、上线。
开发环境(dev):
开发环境是指的是咱们本地跑的环境。
测试环境(qa):
一般是克隆一份生产环境的配置,qa即test。
生产环境(prod)
正式提供对外服务的,即是真实环境。
关于三个环境的切换已然标准化了,这里只是一笔带过一下,因为下文中的配置文件会跟三个环境有关联。相信所有人都不会对这三个环境陌生的。
今天主要讲讲关于springboot如何通过多个properties实现数据库环境部署时自动切换配置的两种方式,部署时切换方式和打包时Maven控制方式。首先介绍部署时切换的方式。
v部署时切换
1.1 配置dev和qa环境数据,以备测试。

1.2 新增properties文件

如上图:在application.properties文件的同级目录依次创建application-dev.properties,application-qa.properties,application-pro.properties这三个配置文件,dev、qa和prod分别对应上文"环境介绍"中的三个环境。
1.3 配置各个properties文件
在application.properties中添加配置切换选项,例如切换到dev环境的配置为:spring.profiles.active=dev
依次在application-dev.properties,application-qa.properties,application-pro.properties配置相关datasource连接信息。
例如application-dev.properties配置:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mytest
spring.datasource.username=root
spring.datasource.password=***********
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

1.4 本地环境
当设置application.properties中spring.profiles.active=dev时,则此时启动连接的是dev环境。

如上图,此时运行得到的结果与配置文件一致,是dev环境的数据。
1.5 部署测试环境
部署测试环境,关于部署有不了解的可以看看《CentOS部署SpringBoot项目从0到1》,部署时切换到qa环境。
java -jar zuche-0.0.1-SNAPSHOT.jar --spring.profiles.active=qa --server.port=2008

可以看到日志中显示的内容与预期一致,spring.profiles.active设置为qa, 端口设置为2008。
运行效果如下图,部署以后连接的qa环境。

vMaven控制打包时切换
2.1 设置项目对象模型pom.xml
2.1.1 添加profiles到pom.xml中,profiles节点是和build同级的。
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>qa</id>
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
activation表示的是可以用这样的命令来触发profile,true表示dev是默认的profile, 这样本地直接ide启动项目的时候就是连接的dev环境。
2.1.2 添加filters节点。
<filters>
<filter>src/main/resources/application-${env}.properties</filter>
</filters>

2.2 更新application.properties。
spring.profiles.active=@env@
注意@env@中的env可以理解为一个变量,需要与2.1.2中设置的${env}对应上。
2.3 添加Maven打包命令
clean package -P qa -D maven.test.skip=true

-D maven.test.skip=true不执行测试用例,也不编译测试用例类。
2.4 执行Maven命令

查看jar包的application.properties文件的spring.profiles.active,看Maven命令是否生效。

如上图,spring.profiles.active=qa
2.5 部署Tomcat
java -jar zuche-0.0.1-SNAPSHOT.jar --server.port=2008

Maven打包时已经设置了qa环境,部署命令中不需要再指明qa环境。
v博客总结
本文通篇讲的主要是围绕springboot部署jar包的两种方式,至于war包,以后有时间再说说。
v源码地址
https://github.com/toutouge/javademosecond/tree/master/hellospringboot
作 者:请叫我头头哥
出 处:http://www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置的更多相关文章
- Elasticsearch入门教程(三):Elasticsearch索引&映射
原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...
- RabbitMQ入门教程(三):Hello World
原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...
- 无废话ExtJs 入门教程三[窗体:Window组件]
无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- SpringBoot入门(三)——入口类解析
本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...
- PySide——Python图形化界面入门教程(三)
PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...
- JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍
JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...
- springBoot入门教程(图文+源码+sql)
springBoot入门 1 springBoot 1.1 SpringBoot简介 Spring Boot让我们的Spring应用变的更轻量化.比如:你可以仅仅依靠一个Java类来运行一个Spr ...
- WebGL入门教程(三)-webgl动画
前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL动画有移动.旋转和缩放,我们将移动.旋转和缩放图形,然后将其绘制到屏幕上,称为变换(tr ...
随机推荐
- 实验5 Spark SQL 编程初级实践
源文件内容如下(包含 id,name,age),将数据复制保存到 ubuntu 系统/usr/local/spark 下, 命名为 employee.txt,实现从 RDD 转换得到 DataFram ...
- 平时作业五 Java
使用I/O流和文件对象实现目录备份功能.用户指定源目录.目标目录以及备份文件类型(如果是任意文件使用通配符*号),通过此程序可将源目录及其所有子目录下的指定类型文件保存到目标目录. package c ...
- git 提交代码到库
今天用git commit -m “注释”提交的时候,注释写错了,于是各种查资料开始了和git bash vim的纠缠...(网上的资料我真是没操作成功,不过最后还是摸索出来了) 首先 使用 git ...
- Java 什么是线程安全
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的.其中,正确性指某个类的行 ...
- XGBoost原理和公式推导
本篇文章主要介绍下Xgboost算法的原理和公式推导.关于XGB的一些应用场景在此就不赘述了,感兴趣的同学可以自行google.下面开始: 1.模型构建 构建最优模型的方法一般是最小化训练数据的损失 ...
- openCV 简单实现身高测量(未考虑相机标定,windows)
(一) OpenCV3.1.0+VS2015开发环境配置 下载OpenCV安装包(笔者下载3.1.0版本) 环境变量配置(opencv安装路径\build\x64\vc14\bin,注意的是x64文件 ...
- 了解vue APi
阳光那么好,何必自寻烦恼,过好每一个当下,一万个美丽的未来抵不过一个温暖的现在. 一.Vue.nextTick(): 该api 是在Dom节点更新结束之后执行的一个延时回调.在修改数据之后,立即使用这 ...
- 访问不了虚拟机 ubuntu中的myql,解决方案
============================================================== 1. 现象 2. 原因分析 2.1 访问虚拟机中的mysql的前提: 你的 ...
- Rewrite JSON project with Fetch
上传 JSON 数据 使用fetch()来发布json编码的数据. var url = 'https://example.com/profile'; var data = {username: 'ex ...
- Mesos源码分析(9): Test Framework的启动
我们以Test Framework为例子解释Framework的启动方式. Test Framework的代码在src/examples/test_framework.cpp中的main函数 首先要指 ...