SpringBoot从入门到精通教程(八)- 多环境配置文件用法

需求背景

在没有使用配置中心的情况下,其实默认在Springboot2框架中,是支持了多个配置文件,允许在不同环境下切换的了,可以去结合Jenkins/Docker来使用(这部分内容后续会更新)

准备内容

1. 准备两个Mysql实例,db1和db2

2. 两份数据库初始化init.sql脚本内容(或Docker安装MySQL数据库

db1-init.sql

-- for db1

drop table city;

CREATE TABLE `city` (
  `id` int(11) NOT NULL primary key,
  `name` varchar(32) DEFAULT NULL,
  `state` varchar(32) DEFAULT NULL,
  `country` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `city` (`id`, `name`, `state`, `country`)
VALUES
	(1, '广州11', 'GZ11', 'CH11'),
	(2, '北京12', 'BJ12', 'CH12'),
	(3, '深圳13', 'SZ13', 'CH13');

db2-init.sql

-- for db2

drop table city;

CREATE TABLE `city` (
  `id` int(11) NOT NULL primary key,
  `name` varchar(32) DEFAULT NULL,
  `state` varchar(32) DEFAULT NULL,
  `country` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `city` (`id`, `name`, `state`, `country`)
VALUES
	(4, '广州14', 'GZ14', 'CH14'),
	(5, '北京15', 'BJ15', 'CH15'),
	(6, '深圳16', 'SZ16', 'CH16');

代码演示

此项目目录结构(本项目是在此教程(Mysql和Mybatis+XML用法详解)基础上改造而来):

主要核心代码如下:

1. 三个application.yml文件

application.yml

# 不同的环境使用不同的配置,通过指定启动参数使用不同的profile和配置文件,比如:
# 开发环境:java -jar xxx.jar --spring.profiles.active=dev
# 生产环境:java -jar xxx.jar --spring.profiles.active=prod
spring:
   profiles:
      active: dev
      
# tomcat
server:
   port: 9090
   
# mybatis
mybatis:
   config-location: classpath:mybatis-config.xml
   
# logging
logging:
   config: classpath:logback-${spring.profiles.active}.xml

开发/测试环境:application-dev.yml(如果要用到多数据源用法,则参考spring-boot2-mysql-multi-datasource项目

spring:
   datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://192.168.0.1:3306/db1?useUnicode=true&autoReconnect=true&allowMultiQueries=true&useSSL=false
      username: root
      password: 123456

生产环境:application-prod.yml

spring:
   datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://192.168.0.1:3306/db2?useUnicode=true&autoReconnect=true&allowMultiQueries=true&useSSL=false
      username: root
      password: 123456

2. logback.xml日志配置文件

开发/测试环境:logback-dev.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d [%t] [%c] [%p] (%file:%line\)- %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>
	<appender name="baselog"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/run.log</File>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>log/run.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<!-- or whenever the file size reaches 64 MB -->
				<maxFileSize>64 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<!-- 保留天数 -->
			<maxHistory>7</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>
				%d [%t] [%c] [%p] (%file:%line\)- %m%n
			</pattern>
			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
		</encoder>
	</appender>
	<root level="INFO">
		<appender-ref ref="STDOUT" />
	</root>
	<logger name="com.md" level="DEBUG">
		<appender-ref ref="baselog" />
	</logger>
</configuration>

生产环境:logback-prod.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d [%t] [%c] [%p] (%file:%line\)- %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>
	<appender name="baselog"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/run.log</File>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>log/run.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<!-- or whenever the file size reaches 64 MB -->
				<maxFileSize>64 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<!-- 保留天数 -->
			<maxHistory>7</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>
				%d [%t] [%c] [%p] (%file:%line\)- %m%n
			</pattern>
			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
		</encoder>
	</appender>
	<!-- 这个位置可以定义上报ELK系统,后续会更新有专门教程 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
	</root>
	<logger name="com.md" level="INFO">
		<appender-ref ref="baselog" />
	</logger>
</configuration>

3. 项目启动

不同的环境使用不同的配置,通过指定启动参数使用不同的profile和配置文件,比如:
开发环境:java -jar xxx.jar --spring.profiles.active=dev
生产环境:java -jar xxx.jar --spring.profiles.active=prod

在启动日志中时,可以看得到具体是激活哪个配置了

4. 验证功能

分别启动访问同一个接口时 localhost:9090/listCities,可以看到数据已变化

dev环境时,访问db1库的数据:

日志也输出了debug内容:

而,prod环境时,访问db2库的数据:

日志只输出了info内容

完整源码下载

我的Github源码地址:

https://github.com/hemin1003/spring-boot-study/tree/master/spring-boot2-study/spring-boot2-parent

下一章教程

SpringBoot从入门到精通教程(九)- Docker集成+容器化部署详解/上篇

该系列教程

SpringBoot从入门到精通教程

 

 

 

至此,全部介绍就结束了

 

------------------------------------------------------

------------------------------------------------------

 

关于我(个人域名)

我的开源项目集Github

 

期望和大家一起学习,一起成长,共勉,O(∩_∩)O谢谢

欢迎交流问题,可加个人QQ 469580884,

或者,加我的群号 751925591,一起探讨交流问题

不讲虚的,只做实干家

Talk is cheap,show me the code

如果觉得内容赞,您可以请我喝杯咖啡:

        

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页