1、yml文件配置
spring:
datasource: # 数据库四大组件
schema-password: root
data-username: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTC
server: #设置tomcat
port: 8888 #设置tomcat的端口号
servlet:
context-path: /springboot # 设置项目启动的根目录,这里面必须加上‘/’不然项目无法启动
tomcat:
uri-encoding: utf-8 #设置编码格式
---
# 开发配置
spring:
profiles: dev #设置开发环境
server:
port: 8081
---
# 生产配置
spring:
profiles: prod #设置生产环境
server:
port: 9000
这里,我对开发配置和生产环境做了配置。上面的配置是公共配置,下面我们分别配置了开发和生产的配置。spring.profiles
表示配置的名称,spring.profiles.active
表示要激活的环境,值和要切换的spring.profiles
名称一致。上面这个文件,默认激活的就是dev开发配置。
如果spring.profiles.active
没有指定值,那么只会加载通用的配置。
2、启动配置选择
工程打成jar包后,我们可以在运行的时候对配置进行选择,而不需要每次打包前都手动去修改spring.profiles.active
的值。
例如在开发环境,我们可以使用dev配置执行jar包,命令如下:
java -jar xxx.jar --spring.profiles.active=dev
同样在生产环境,我们可以使用prod配置执行jar包,命令如下:
java -jar xxx.jar --spring.profiles.active=prod
3、将yml文件拆分多个文件
开发环境 application-dev.yml
# 开发配置
spring:
datasource: # 数据库四大组件
schema-password: root
data-username: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTC
server: #设置tomcat
port: 8020 #设置tomcat的端口号
servlet:
context-path: /springboot # 设置项目启动的根目录,这里面必须加上‘/’不然项目无法启动
tomcat:
uri-encoding: utf-8 #设置编码格式
生产环境 application-prod.yml
# 生产配置
spring:
datasource: # 数据库四大组件
schema-password: root
data-username: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTC
server: #设置tomcat
port: 8010 #设置tomcat的端口号
servlet:
context-path: /springboot # 设置项目启动的根目录,这里面必须加上‘/’不然项目无法启动
tomcat:
uri-encoding: utf-8 #设置编码格式
4、用Maven控制默认配置
在打包的时候,通过自动改变spring.profiles.active
的激活配置,这样直接通过java -jar xxx.jar
即可运行项目。现在的项目上线一般采用自研运维系统,默认是直接执行jar、war包的,不能在启动时选择配置,所以在打包时如果能自动将spring.profiles.active
配置动态切换就可以了。
那如何实现呢?这里我们需要使用maven-resources-plugin插件。
在pom.xml添加如下配置
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
在< plugins/>里添加,当然 pom.xml 需要添加以下依赖
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>default-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>#</delimiter>
</delimiters>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources.${spring.profiles.active}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
这里<delimiter>#</delimiter>
用来增加一个占位符,Maven本身有占位符${xxx}
,但这个占位符被SpringBoot占用了,所以我们就再定义一个。<filtering>true</filtering>
表示打开过滤器开关,这样application.yml文件中的#spring.profiles.active#
部分就会替换为pom.xml里profiles中定义的 spring.profiles.active
变量值。
最后,将application.yml的spring.profiles.active
的值改为#spring.profiles.active#
。
# 默认使用配置
spring:
profiles:
active: #spring.profiles.active#
这样,在用maven打包的时候,使用mvn package -P prod
打包,最后打包后的文件中,application.yml中的spring.profiles.active
的值就是prod。这样直接运行java -jar xxx.jar
,就是生产环境的配置了。
以上就是SpringBoot + Maven实现多环境动态切换yml配置及配置文件拆分。
SpringBoot内置tomcat依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
此外tomcat的配置文件属性还有以下:
server. Port = xxxx
server. Address =
server. contextPath =
server. displayName =
server. servletPath =
server. contextParameters =
server. useForwardHeaders =
server. serverHeader =
server. maxHttpHeaderSize =
server. maxHttpPostSize =
server. connectionTimeout =
server. session.timeout =
server. session.trackingModes =
server. session.persistent =
server.session.storeDir =
server.cookie. name =
server.cookie. domain =
server.cookie. path =
server.cookie. comment =
server.cookie. httpOnly =
server.cookie. secure =
server.cookie. maxAge =
server. ssl. Enabled =
server.ssl. clientAuth =
server.ssl. ciphers =
server.ssl. enabledProtocols =
server.ssl. keyAlias =
server.ssl. keyPassword =
server.ssl. keyStore =
server.ssl. keyStorePassword =
server.ssl. keyStoreType =
server.ssl. keyStoreProvider =
server.ssl. trustStore =
server.ssl. trustStorePassword =
server.ssl. trustStoreType =
server.ssl. trustStoreProvider =
server.ssl. protocol =
server.compression. enabled =
server.compression.mimeTypes =
server.compression.excludedUserAgents =
server.compression.minResponseSize =
server. jspServlet. className =
server.jspServlet. initParameters =
server.jspServlet.registered =
server.tomcat.accesslog.enabled =
server.tomcat.accesslog.pattern =
server.tomcat.accesslog.directory =
server.tomcat.accesslog.prefix =
server.tomcat.accesslog.suffix =
server.tomcat.accesslog.rotate =
server.tomcat.accesslog.renameOnRotate =
server.tomcat.accesslog.requestAttributesEnabled=
server.tomcat.accesslog.buffered =
server.tomcat.internalProxies =
server.tomcat.protocolHeader =
server.tomcat.protocolHeaderHttpsValue =
server.tomcat.portHeader =
server.tomcat.remoteIpHeader=
server.tomcat.basedir =
server.tomcat.backgroundProcessorDelay =
server.tomcat.maxThreads =
server.tomcat.minSpareThreads =
server.tomcat.maxHttpPostSize =
server.tomcat.maxHttpHeaderSize =
server.tomcat.redirectContextRoot =
server.tomcat.uriEncoding =
server.tomcat.maxConnections =
server.tomcat.acceptCount =
server.tomcat.additionalTldSkipPatterns =
注意:可以在yml文件中修改tomcat的各个配置,比如端口号或者线程数等。