再简单的应用系统,通常都有两个环境——开发环境和线上环境。大型的企业应用还会有更多的环境,比如测试环境、准线上环境、演示环境等。应用的版本也可能对应了多个环境,比如1。0版本的演示环境、2.0版本的演示环境。这些环境对应了不同的配置要求,通常有:

  • 数据库的访问地址不同,数据库用户名和密码也不同,连接池的配置也大不一样,开发环境可能只配置5个连接,而线上环境则多达数百个。
  • 日志配置不同,开发和测试环境的日志级别可能是 debu 级别 日志信息 常常包含代码所在行,而线上环境 通常是 INFO 级别 且为了性能考虑不会输出日志所在行。另外,对日志文件要求 不尽相同,线上环境要求日志文件能定时打包压缩,开发环境则往往不会配置日志文件。
  • 访问的第 方系统不一样,复杂的应用通常要访问第 方系统,如系统内的Redis缓存,通过REST访问其他Spring Boot应用,这都需要配置不同的IP地址。
  • 不同的环境有不同的开关属性, 比如开发系统, 需要关闭短信、微信的通知功能,而演示环境、线上环境则需要打开这些配置

  需要在 resources 下创建 application-{profile}.properties 的配置文件,其中 profile 可以是任意名字,比如:

  • test, 表示测试环境;
  • prod, 表示线上环境;
  • pre-prod, 预发布环境;
  • demo1.0, 1.0版本演示环境;

  这些配置文件可以添加或者覆盖 application.properties 文件的属性。

  在环境变量中, spring.profiles.active 指定使用哪个 profile, 比如:

java -jar -Dspring.profiles.active=prod target/ch8.deploy-0.0.1-SNAPSHOT.jar

  以上配置启动后,Spring Boot 将读取 resources/application-prod.properties 配置文件,覆盖默认的 application.properties 选项。

  如果使用 war 方式部署, 添加系统属性是比较好的方式, 下面以 Tomcat 为例进行说明。

  编辑 catalina.sh, 在 sh 文件的开头部分添加如下内容:

  

JAVA_OPTS="-Dspring.profiles.active=prod"

  

  在多环境部署中, 通常 resources 目录下可能没有目标环境的配置文件, 这主要是为了安全考虑,开发环境下不应该有线上环境的各种配置信息。可以将配置文件放到特定的目录中,并用 spring.config.location 指定配置文件的目录:

>java -jar -Dspring.config.location=file:env/ -Dspring.profiles.active=test target/chl1.deploy-0.0.-SNAPSHOT.jar

  配置文件位于当前目录的env目录下, profile 是 test, 因此读取的是 application-test.properties 配置文件。

  注意: 无论用上面哪种多环境配置方法, 总是会覆盖已有的application.properties。

  Spring Boot 如何找到配置文件:

  Spring Boot 应用默认读取了 application.properties 文件, 实际上, Spring Boot 会自动搜索

  classpath:、 classpath:/config、 file:、 file:config/ 这些目录下的配置文件, 优先级由低到高,

  file:config/ 的优先级最高。

  这是系统属性 spring.config.location 默认的配置。 spring.config.name 表示配置文件的名称,

  默认是 application

Spring Boot 多环境部署的更多相关文章

  1. Spring boot 分环境部署

    一.如果配置文件为:application.properties时 1.application.properties用于填些公共文件 以下为不同环境的配置文件需要单独配置 application-de ...

  2. Spring Boot入门系列(十五)Spring Boot 开发环境热部署

    在实际的项目开发过中,当我们修改了某个java类文件时,需要手动重新编译.然后重新启动程序的,整个过程比较麻烦,特别是项目启动慢的时候,更是影响开发效率.其实Spring Boot的项目碰到这种情况, ...

  3. Spring boot+RabbitMQ环境

    Spring boot+RabbitMQ环境 消息队列在目前分布式系统下具备非常重要的地位,如下的场景是比较适合消息队列的: 跨系统的调用,异步性质的调用最佳. 高并发问题,利用队列串行特点. 订阅模 ...

  4. Spring Boot 多环境如何配置

    Spring Boot 开发环境.测试环境.预生产环境.生产环境多环境配置 通常一个公司的应程序可能在开发环境(dev).测试环境(test).生产环境(prod)中运行.那么是不是需要拷贝不同的安装 ...

  5. spring boot 开发环境搭建(Eclipse)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. 从头开始搭建一个Spring boot+RabbitMQ环境

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. kotlin web开发教程【一】从零搭建kotlin与spring boot开发环境

    IDEA中文输入法的智能提示框不会跟随光标的问题 我用的开发工具是IDEA 这个版本的IDEA有一个问题: 就是中文输入法的智能提示框不会跟随光标 解决这个问题的办法很简单,只有在安装目录下把JRE文 ...

  8. Spring boot 应用打包部署

    1.Spring Boot内置web spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定 ...

  9. Spring boot+ logback环境下,日志存放路径未定义的问题

    日志路径未定义 环境:Spring boot + logback 配置文件: <configuration> <springProfile name="dev"& ...

随机推荐

  1. C# FTP删除文件以及文件夹

    1.FTP文件操作类   FtpClient using System; using System.Collections.Generic; using System.Linq; using Syst ...

  2. 【SQL重温】面试之数据库基础练习

    简介 最近在练习SQL基础,首先感叹一下,在机器上写和在纸上写还是有区别的. 本文的练习题目请点击此链接进行查看:http://www.cnblogs.com/edisonchou/p/3878135 ...

  3. java word转pdf 工具类

    package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...

  4. 让NSUserDefaults使用起来像对象一样容易

    让NSUserDefaults使用起来像对象一样容易 巧妙的设计,是为了简化开发提升效率而存在. 设计要点: 1. 单例模式 2. 重写setter,getter方法 3. 专门的类来管理单例 使用时 ...

  5. .net 面向对象程序设计深入](3)UML

    1.活动图简介 定义:是阐明了业务用例实现的工作流程. 业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作. 业务用例由一系列活动组成,它们共同为业务主角生成某些工件. 工作流 ...

  6. C++中虚继承的作用及底层实现原理

    http://blog.csdn.net/bxw1992/article/details/77726390

  7. 设计模式:享元(FlyWeight)模式

    设计模式:享元(FlyWeight)模式 一.前言     享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候 ...

  8. WAS缓存问题

    在项目中经常遇见这样的问题:修改应用的配置文件web.xml后,无论重启应用还是重启WebSphere服务器,都不能重新加载web.xml,导致修改的内容无效. 这个问题困扰了我好久,即使删除了${w ...

  9. 从数据库反向生成django的models

    有办法实现django 数据库反向生成models的方法吗?答案是肯定的. 1. 配置 settings.py 中的数据库配置部分 DATABASES = { 'default': { 'ENGINE ...

  10. 关于SQL注入中编码问题的疑问

    提到SQL注入的绕过,编码是其中最普通的一种方法,最常用的URL编码.之前一直有个疑问,编码与未编码到底有哪些地方存在区别? 以下是本人自己对URL编码的一些见解,可能有错误的地方欢迎大佬们指正. 什 ...