二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。

上一章简单介绍了SpringBoot的yml配置文件(三),如果没有看过,请观看上一章

一. SpringBoot的热布署

在开发当中,如果我们的代码发生了改变,我们想让其生效,那么就需要重新启动服务,这样会浪费太多的时间。 我们希望不重启服务,当代码发生了改变,即使是微小的改变,也可以被检测到,这种方式就叫做热布署。SpringBoot很好的提供了这一支持。

老蝴蝶接下来,就验证一下 SpringBoot热布署操作。

一.一 通过maven创建 DevTools项目

老蝴蝶采用Maven的方式创建了 DevTools项目,用于验证热布署。

添加了一个 HelloController的响应类,进行响应字符串信息。 pom.xml 依赖,还是以前的那些依赖。

application.yml 配置信息是:

server:port: 8027servlet:context-path: /Yue

一.二 无热布署时的操作

输入网址: http://localhost:8027/Yue/ 可以正常的响应数据。

这个时候,如果我们想改变 toHello()方法里面的响应信息,变成 “我是两个蝴蝶飞” 。

刷新浏览器,发现浏览器的响应信息依旧没有发生改变。

只有当我们重新启动服务器之后,刷新,才可以看到改变后的信息。

这是没有热布署的情况下,方法里面代码发生了一点点改变,也必须要重启服务器。

一.三 SpringBoot实现热布署操作

为了避免 Idea对热布署产生影响,我们需要先对Idea进行配置,允许Idea进行静态编译和动态编译。

一.三.一 Idea开启静态自动编译

File—>Settings—>Build,Execution,Deployment—>Compiler—>勾选 Build project automatically

一.三.二 Idea开启动态自动编译

按住快捷键 Ctrl+Shift+Alt+/ ,选中 Registry

会进入到

从这里面找到

compiler.automake.allow.when.app.running 和 compiler.document.save.enabled 选项 (按照字典顺序进行查询,老蝴蝶以前设置过,所以在最前面),进行勾选, 点击关闭,再次打开,就会发生已经勾选了。

一.三.三 pom.xml 中添加 devtools 热布署依赖

 <!--导入自动热布署的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

重启项目之后,先验证一下以前的 url可以正常的访问响应。

一.三.四 修改代码,进行验证

将输出信息改成 “我是两个蝴蝶飞,我突然不开心了”

会发现,控制台会自动重启了

刷新浏览器,会发生改变

一.三.五 自动热布署并不是万能的

刚才,我们只是简单的修改方法内的代码,我们在实际开发中,除了修改方法内的代码,还常常创建新的方法和创建类文件。

这个时候,看看会是什么效果?

一.三.五.一 创建新方法

添加一个新方法 helloWorld()

控制台并没有重启

访问地址: http://localhost:8027/Yue/helloWorld

会发现,

报错了。

我们可以将其与 Idea 进行整合使用, Idea 使用 ctrl+F9会自动编译

点击 Yes ,刷新浏览器,可以发现,能够生效了。

一.三.五.二 创建新类

创建一个新的 InfoController 类,看看效果。

控制台并没有重新启动

需要 搭配 Ctrl+F9 一块使用,才可以。

自动热部署 ,生产环境时应该被禁用,打包时,也不会包含此 devtools.

二. SpringBoot的多环境配置

在我们实际开发中,常常会有多种环境, 开发环境,测试环境,预生产环境,生产环境,这些环境的配置是不相同的(数据库信息一定不同)。 以前只有一个配置文件,不同的环境进行转换时,需要将配置文件进行替换,这样很不方便。 如果能够在一个总的配置文件里面,指定这次运行加载的配置文件就好了, 或者能在环境运行时,指定就更好了。 SpringBoot提供了这种支持,叫做多环境转换。

老蝴蝶这儿用 开发,测试,生产 三个环境进行演示,环境的区别,只用简单的端口号和项目路径进行表示。

以前的 application.yml 配置文件信息是这样:

常见的有三种配置方式。

二.一 多个配置文件,主配置文件进行指定

二.一.一 创建多个配置文件信息

application.yml 是主配置文件信息, application-dev.yml 是开发环境的配置。

application-test 是测试环境的配置, application-proc 是生产环境的配置。

注意,新添加的配置文件的命名,一定要是 application-xxx.yml

二.一.二 为不同的配置文件设置不同的配置信息

二.二.二.一 开发环境 dev 配置

server:port: 8081servlet:context-path: /Yue1

二.二.二.二 测试环境 test 配置

server:port: 8082servlet:context-path: /Yue2

二.二.二.三 生产环境 proc配置

server:port: 8083servlet:context-path: /Yue3

二.二.二.四 主环境配置

用 spring.profiles.active 属性指定使用哪一个配置文件。

# 将以前的配置去除
#server:
#  port: 8027
#  servlet:
#    context-path: /Yue
spring:profiles:active: dev   # 指定要使用哪一个环境

此时,使用的是开发环境。

二.一.三 测试运行

控制台打印输出 :

发现,使用的确实是 开发环境。

将 application.yml 中的配置 spring.profiles.active 改成 test

spring:profiles:active: test   # 指定要使用哪一个环境

重新运行项目,观察控制台输出:

发现,变成 了 8082, /Yue2, 这些确实是 test测试环境的配置。

将 application.yml 中的配置 spring.profiles.active 改成 proc ,

spring:profiles:active: proc   # 指定要使用哪一个环境

重启项目后,观察控制台输出

发现,变成 了 8083, /Yue3, 这些确实是 proc生产环境的配置。

如果将 spring.profiles.active 改成 yuejl, 一个不存在的配置文件呢?

spring:profiles:active: yuejl   # 指定要使用哪一个环境

重启项目,观察控制台输出

会采用 8080 空 这种默认的配置。

二.二 单配置文件配置

上面配置一个环境,需要四个配置文件信息,能不能放置在一个配置环境里面呢? 改变时,只改变那些有区分的信息,如数据库连接信息,端口号和项目名这些可以相同的配置,不用改变。 yaml 配置文件,支持这种方式, 用 — 进行分隔不同的配置文件。

二.二.一 单文件配置

application.yml 的配置文件总信息是:

# 将以前的配置去除
#server:
#  port: 8027
#  servlet:
#    context-path: /Yue
spring:profiles:active: dev   # 指定要使用哪一个环境---
server:port: 8081servlet:context-path: /Yue1
spring:profiles: dev  # 用 spring.profiles 设置配置文件的名称,是开发环境
---
server:port: 8082servlet:context-path: /Yue2
spring:profiles: test  # 用 spring.profiles 设置配置文件的名称,是测试环境
---
server:port: 8083servlet:context-path: /Yue3
spring:profiles: proc  # 用 spring.profiles 设置配置文件的名称,是生产环境

二.二.二 测试运行

测试运行时,效果与多个配置文件的效果一样,改变 spring.profiles.active 的值的话,可以动态的改变环境的配置信息。

老蝴蝶这儿就不重复粘贴了。

二.三 运行时指定

第二种方式,需要在配置文件里面用 spring.profiles.active 进行指定。 切换不同的环境的话,也需要改变其对应的值。

能不能在 java -jar 时指定运行哪一个配置文件呢? 是可以的, SpringBoot支持这种处理。

在 java -jar Xxx.jar 时,后面添加参数 --spring.profiles.active=dev(test,proc) 这样方式。

二.三.一 application.yml配置文件里面去掉 指定文件属性

# 将以前的配置去除
#server:
#  port: 8027
#  servlet:
#    context-path: /Yue
---
server:port: 8081servlet:context-path: /Yue1
spring:profiles: dev  # 用 spring.profiles 设置配置文件的名称,是开发环境
---
server:port: 8082servlet:context-path: /Yue2
spring:profiles: test  # 用 spring.profiles 设置配置文件的名称,是测试环境
---
server:port: 8083servlet:context-path: /Yue3
spring:profiles: proc  # 用 spring.profiles 设置配置文件的名称,是生产环境

二.三.二 通过maven 进行打包运行

mvn clean install

运行成功之后,会生成一个 jar包

二.三.二.一 不指定环境

采用 java -jar 的方法进行运行, 先不指定环境

D:\githubBoot\springboot\DevTools\target>java -jar learn-1.0-SNAPSHOT.jar

默认的配置会生效。

二.三.二.二 指定为开发环境

java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=dev

二.三.二.三 指定为测试环境

java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=test

二.三.二.四 指定为生产环境

java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=proc

二.三.二.五 指定一个不存在的环境时

java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=yuejl

会走默认的。

注意, 在 java -jar 时指定运行环境的优先级最高,比直接在配置文件中指定优先级高,所以既在配置文件中指定了,又在 java -jar 时指定了,以 java -jar 时为准。

本章节的代码放置在 github 上:

https://github.com/yuejianli/springboot/tree/develop/DevTools

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

SpringBoot的热布署和多环境配置(四)相关推荐

  1. IDEA热布署报错java.lang.IllegalStateException: Restarter has not been initialized

    在IDEA导入devtools依赖实现热布署,启动后遇到如下问题 java.lang.IllegalStateException: Restarter has not been initialized ...

  2. spring boot 在IDEA使用devtools热布署不成功,都没有注意的事!

    在网上搜索了很多关于spring boot 使用devtools热布署问题的文章,都说不成功的问题主要是下面两点: 1.在settings->build,execution,Deployment ...

  3. apollo热布署mysql_docker部署apollo详细教程

    1.前言 apollo的详细介绍我就不在这里多说了,官网上https://github.com/ctripcorp/...已经说的非常明白了,我就不在这班门弄斧了,还不了解的小伙伴可以去官网上去了解下 ...

  4. springboot多环境配置_编辑 SpringBoot|第五章:多环境配置

    多环境配置 在开发应用时,常用部署的应用是多个的,比如:开发.测试.联调.生产等不同的应用环境,这些应用环境都对应不同的配置项,比如swagger一般上在生产时是关闭的:不同环境数据库地址.端口号等都 ...

  5. java 热布署 开源_一种简单快捷的 java 热部署方式

    作者 | 周忠太 阿里巴巴淘系技术部的一个搬砖工 [Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿] Arthas Hot Swap 插件介绍 引言 热部署是帮助开发人员提高效率的利 ...

  6. openstack私有云布署实践【0 前言】

    该环境布署文档,因项目运营中止2年,IDC均早已撤回.使用openstack 版本虽老,但弃之可惜,故贴出分享,其中已经将各个组件密码进行了提前替换,仅供参考 管理控制层面示图: 其实在修改这个布署文 ...

  7. Yearning sql审核平台docker化布署

    在一个云主机centos 7上布署线上环境和开发开发两套审核平台. 1.下载yearning sql安装文件: git clone https://github.com/cookieY/Yearnin ...

  8. spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃

    spring boot:从零开始搭建一个项目 - day 7 springboot devtools热加载+MybatisPlus配置+kisso从入门到放弃 一.springboot devtool ...

  9. python+selenium环境配置及浏览器调用

    最近在学习python自动化,从项目角度和技术基础角度出发,我选择了python+selenium+appium的模式开始我的自动化测试之旅: 一.python安装 二.python IDE使用简介 ...

最新文章

  1. Spring Boot 2.X 使用@Cacheable时注意事项
  2. C/C++语言宏定义##连接符和符#的使用
  3. gitlab git clone 卡住_IDEA中的Git操作你掌握了吗?此一篇,足矣!
  4. 漫步数学分析二十六——积分方程与不动点
  5. 《华为美》歌曲洗脑惹争议 华为回应:不知情、未参与 感谢厚爱
  6. 直流稳压电源的设计与制作
  7. Express框架学习笔记-app.locals对象
  8. python+openCV+tkinter---人脸识别登录系统
  9. 用python写一元二次方程_使用Python解一元二次方程!
  10. 每天15min-HTML5(10)-表单(上)
  11. r语言中mpg数据_R语言数据分析系列之五
  12. ${pageContext.request.contextPath}的作用
  13. android checkbox样式
  14. 钱宝网可靠吗? 不信可以先试用后在说
  15. 【BZOJ】3007 拯救小云公主 最短路径
  16. VSTO Shapes对象、ShapeRange对象和Shape对象的关系
  17. 如何用AI制作发光字?
  18. MYSQL索引的作用以及如何创建索引
  19. Sql Server 2016新功能之Row-Level Security(值得关注)
  20. ZZULIOJ1015

热门文章

  1. mysql ping命令_MySQL常用命令总结
  2. 微信视频号直播数据哪里可以看?
  3. Cross_entropy和softmax
  4. 云计算技术基础期末复习
  5. 合同和协议的区别_合同和协议有什么区别?
  6. AI 20年内将会给我们的生活带来什么改变?
  7. Heuristic Search之Greedy Best First Search
  8. ISA防火墙中的防火墙客户身份验证
  9. 【Python课程作业】食物数据的爬取及分析(详细介绍及分析)
  10. Go语言为什么值得学习?