前面的文章已经介绍了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实现多个数据库环境自动切换配置的更多相关文章

  1. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

  2. RabbitMQ入门教程(三):Hello World

    原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  3. 无废话ExtJs 入门教程三[窗体:Window组件]

    无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...

  4. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  5. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  6. PySide——Python图形化界面入门教程(三)

    PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  7. JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍

    JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...

  8. springBoot入门教程(图文+源码+sql)

    springBoot入门 1   springBoot 1.1 SpringBoot简介 Spring Boot让我们的Spring应用变的更轻量化.比如:你可以仅仅依靠一个Java类来运行一个Spr ...

  9. WebGL入门教程(三)-webgl动画

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL动画有移动.旋转和缩放,我们将移动.旋转和缩放图形,然后将其绘制到屏幕上,称为变换(tr ...

随机推荐

  1. Codeforces.1129E.Legendary Tree(交互 二分)

    题目链接 \(Description\) 有一棵\(n\)个点的树.你需要在\(11111\)次询问内确定出这棵树的形态.每次询问你给定两个非空且不相交的点集\(S,T\)和一个点\(u\),交互库会 ...

  2. Linux查看端口号是否使用

    netstat -lntup|grep 80 如果令命无法执行 yum install net-tools

  3. Codechef April Challenge 2019 游记

    Codechef April Challenge 2019 游记 Subtree Removal 题目大意: 一棵\(n(n\le10^5)\)个结点的有根树,每个结点有一个权值\(w_i(|w_i\ ...

  4. 使用handler倒计时

    package com.example.jikangwang.myapplication; import android.content.Intent; import android.os.Handl ...

  5. S2.1 修复图像小程序(简单版)

    用OpenCV自带的inpaint()演示 CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask, OutputArray ...

  6. python爬取网页内容demo

    #html文本提取 from bs4 import BeautifulSoup html_sample = '\ <html> \ <body> \ <h1 id = & ...

  7. 【安全性测试】利用反编译查看对应activity的方法采用hook技术绑定劫持_入门

    本次主要为了研究手机端的安全性而写的一篇文章,在基于自己对手机安全性的研究下,想到了这些工具之间的结合,当然这也算是第一次对手机安全研究勇敢地踏出一步,也不知道是否成功,还是准备撞南墙撞到底吧! 使用 ...

  8. 创建python虚拟环境如果速度很慢

    conda create -n jjenv python=3.6如果我们这样子创建的话下载速度很慢,那就可以用如下方式,相当于改了下载源. conda create -n jjenv python=3 ...

  9. ios日期显示NaN

    ios中js通过getMonth()获取到的日期显示NaN,而在其他地方如pc.安卓都是ok的,这是为什么呢,原来这里有个ios的兼容问题,需要将日期中的“-”替换为“/” var time = ne ...

  10. linux常见命令实践.

    ls -la : 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls -a . .. 1 online_tools online_tools_0803 ll: 竖列显示所有文件 l ...