背景

很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置。

解决方案

spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

一、新建配置文件

注:配置文件优先级(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

此处使用.yml文件格式,在src/main/resources下新建如下文件

application.yml (主配置)

server:
port: 9990 spring:
profiles:
active: dev #选定配置 #自定义默认值
curvar:
context: default.curvar

application-pro.yml (开发配置)

#模拟开发配置
curvar:
context: "开发配置变量"

application-pro.yml(生产配置)

#模拟生产配置
curvar:
context: "生产配置变量"

二、 服务调用测试

2.1 新建调用类

@Slf4j
@RestController
public class IndexController { @Value("${curvar.context}")
private String cusvar; /**
* .
* 使用哪一个配置
*
* @return
*/
@RequestMapping("/test")
public String test() {
log.debug("使用:[{}]", cusvar);
return "使用配置: " + cusvar;
} }

2.2 使用样例项目

打开浏览器输入:http://localhost:9990/test

三、扩展练习

3.1 使用注解标记配置,首先定义一个接口

public interface Connector {

    String configure();
}

3.2 分别定义俩个实现类来实现它

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component; @Component
@Profile("pro-db")//标记文件,环境切换
public class ProConnector implements Connector { @Override
public String configure() {
return "pro生产标记文件...";
}
}
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component; @Component
@Profile("dev-db")//标记文件,环境切换
public class DevConnector implements Connector { @Override
public String configure() {
return "dev开发标记文件...";
}
}

3.3 修改application.yml文件激活配置

spring:
profiles:
#active: dev #选定配置
active: pro-db #选定配置激活标记文件

3.4 新增查询方法


   @Autowired
private Connector connector; //注入 /**
* .
* 使用哪一个被标记文件
*
* @return
*/
@GetMapping("/proFile")
public String proFile() {
log.debug("使用配置文件:[{}]", connector.configure());
return connector.configure();
}

打开浏览器输入:http://localhost:9990/proFile

3.5 使用一个或多个配置文件及激活标记文件

3.5.1 修改application.yml文件,进行属性叠加

spring:
profiles:
include: pro,dev-db #指定配置文件及激活标记文件
#active: pro-db #选定标记文件

3.5.2 新增查询方法

   /**
* .
* 使用哪一个配置文件及标记文件
*
* @return
*/
@GetMapping("/include")
public String include() {
return String.format("使用配置文件:%s,使用标记文件:%s", cusvar, connector.configure());
}

打开浏览器输入:http://localhost:9990/include

3.6 切换日志文件

3.6.1 新建logback文件

 logback-pro.yml (生产日志)

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<contextName>logback</contextName> <!--定义文件名及存储路径-->
<property name="log.path" value="./pro.log"/>
<!-- ConsoleAppender:控制台设置 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} [%file : %line] - %msg%n
</pattern>
</encoder>
</appender>
<!--RollingFileAppender:滚动记录文件,先将日志记录到指定文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 每产生一个日志文件,该日志文件的保存期限为7天 -->
<maxHistory>7</maxHistory>
</rollingPolicy> <encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender> <!--将上述name名称:console:标签名称为debug-->
<root level="debug">
<appender-ref ref="console"/>
</root>
<!--将上述name名称:file:标签名称为info-->
<root level="info">
<appender-ref ref="file"/>
</root>
<logger name="org.springframework.scheduling" level="error"/>
<Logger name="org.apache.catalina.util.LifecycleBase" level="error"/>
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/>
<Logger name="org.springframework" level="info"/>
<Logger name="org.freeswitch.esl" level="warn"/>
<logger name="java.sql" level="error"/>
<logger name="org.mybatis" level="info"/><!--mybatis的日志级别为info-->
<logger name="com.example" level="debug"/><!--com.hy包下的日志级别为debug-->
</configuration>

3.6.2 修改application.yml文件,配置日志属性

spring:
profiles:
#include: pro,dev-db #指定配置文件及激活标记文件
#active: pro-db #选定标记文件
active: pro #指定配置文件 #日志
logging:
config: classpath:logback-${spring.profiles.active}.xml #本地IDEA启动配置
#config: config/logback-${spring.profiles.active}.xml # java -jar 包启动配置

项目启动访问接口,控制台打印日志

友情提示:jar运行指定配置

java -jar xxx.jar --spring.profiles.active=dev  #指定dev配置

java -jar xxx.jar --server.port=9090 #指定启动端口

参考链接

SpringBoot 多环境配置文件切换的更多相关文章

  1. spring-boot多环境配置文件

    spring-boot多环境配置文件 目录 配置 多环境配置文件名称要遵循格式 application-{profile}.yml application.yml spring: profiles: ...

  2. spring 笔记3: Spring 多环境配置文件切换

    使用Spring进行开发时,需要面对不同的运行环境,比如开发环境.测试环境.生产环境等.大多时候不同的环境需要不同的配置文件.网上很多资料都是使用Spring的Bean definition prof ...

  3. springboot多环境配置文件

    一.关于springboot的配置文件 springboot的配置文件主要有两种:properties文件和yml文件,我们只要选择一种使用就可以了.我们通过properties文件介绍一下配置的方式 ...

  4. SpringBoot(二): SpringBoot属性配置文件 SpringBoot多环境配置文件 SpringBoot自定义配置文件

    1.属性配置文件 一共分为两种,一种是键值对的properties属性配置文件,一种是yaml格式的配置文件 properties配置: 2.多环境配置文件 当我们的项目中有多套配置文件 比如开发的配 ...

  5. 「快学springboot」SpringBoot多环境配置文件

    前言 我们都知道springboot的配置卸载application.properties配置文件上(或者application.yml).但是,如果想要把不同的环境(如开发环境,测试环境,生产环境) ...

  6. springboot 不同环境切换不同的配置文件

    开发的流程是本地>测试>预发布>正式,所以不同的环境,肯定是不同的配置文件,所以我们需要针对不同的环境做不同的配置切换. 下面我们来说说 springboot 是怎么来切换的: 1. ...

  7. springboot笔记05——profile多环境配置切换

    前言 一个应用程序从开发到上线,往往需要经历几个阶段,例如开发.测试.上线.每个阶段所用到的环境的配置可能都是不一样的,Springboot 应用可以很方便地在各个环境中对配置进行切换.所以,今天主要 ...

  8. SpringProfile轻松切换多环境配置文件

    在项目开发的过程中,我们难免会遇到开发.测试.生产等环境的切换,而各个环境的配置肯定是不同的.传统的办法是在项目打包的时候修改配置文件.但人为做的事情难免产生意外.Spring 为我们提供了一种多环境 ...

  9. springBoot 多配置文件切换之profile

    说明: 我们平时工作,有开发环境,和生产环境,利用springboot的多profile配置,可以很轻松切换配置. 实现方式1(推荐): 配置文件命名遵循:application-{开发模式}.pro ...

随机推荐

  1. Hadoop分布式集群部署

    环境准备 IP HOSTNAME SYSTEM 192.168.131.129 hadoop-master CentOS 7.6 192.168.131.135 hadoop-slave1 CentO ...

  2. 拒绝for循环,从take_along_axis开始

    技术背景 在前一篇文章中,我们提到了关于Numpy中的各种取index的方法,可以用于取出数组里面的元素,也可以用于做切片,甚至可以用来做排序.但是遇到对于高维矩阵的某一个维度取多个值的时候,单纯的使 ...

  3. 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1060/1010上串行NOR F ...

  4. [自动化]基于kolla的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...

  5. QT:MYSQL driver not loaded解决方法

    0.参考(按对本人帮助从高到低排列) Qt5.14.1 如何编译和使用mysql和mariadb数据库驱动 (15条消息) QMYSQL driver not loaded 的原理和解决办法_m158 ...

  6. 在win10操作系统中pycharm启动时无法打开的解决方法

    ''' 当打开pycharm时报错 Error launching Pycharm Failed to load JVM DLL C:\Program Files\Jetbrains\Pycharm ...

  7. python中的流程控制

    目录 引言 流程控制的分类 分支结构 单if结构 if与else结构 if与elif与else结构 if分支的嵌套 循环结构 while循环 while + break循环 while + conti ...

  8. CSDN中Markdown编辑器使用方法

    Markdown编辑器 如果想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 新的改变 CSDN中Markdown编辑器进行了一些功能拓展与语法支 ...

  9. windows下安装gym

    安装gym在执行pip install -e'.[all]'这句语句时,可能会出现这种情况 在pycharm中运行的时候会出现如下这种情况: 或者这种情况 出现这种问题可能是python的版本太高了, ...

  10. Linux CentOS7.X- 添加用户

    1.创建用户 useradd username 其中,username是要创建用户的用户名(root使用): 2.设置密码 passwd username 其中,username是指定要修改密码的用户 ...