1、yml文件配置
spring:datasource: # 数据库四大组件schema-password: rootdata-username: rootdriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTCserver: #设置tomcatport: 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: rootdata-username: rootdriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTCserver: #设置tomcatport: 8020 #设置tomcat的端口号servlet:context-path: /springboot # 设置项目启动的根目录,这里面必须加上‘/’不然项目无法启动tomcat:uri-encoding: utf-8 #设置编码格式
生产环境 application-prod.yml
# 生产配置spring:datasource: # 数据库四大组件schema-password: rootdata-username: rootdriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/blogs?serverTimezone=UTCserver: #设置tomcatport: 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 = xxxxserver. 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的各个配置,比如端口号或者线程数等。
