很多的时候我们的项目再不同环境是需要不同的配置的,那么我们怎么分环境部署或者打包呢,请往下面看
首先要在pom.xml加入如下的配置:
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.active>dev</spring.active>
</properties>
<activation>
<!-- 打包和运行没有指定环境,就是打dev包 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<spring.active>test</spring.active>
</properties>
</profile>
<profile>
<id>stg</id>
<properties>
<spring.active>stg</spring.active>
</properties>
</profile>
<profile>
<id>prd</id>
<properties>
<spring.active>prd</spring.active>
</properties>
</profile>
</profiles>
为了让大家看出pom.xml结构,完整的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wangye</groupId>
<artifactId>spboot-logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spboot-logback</name>
<description>Spring Boot with logback</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.active>dev</spring.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<spring.active>test</spring.active>
</properties>
</profile>
<profile>
<id>stg</id>
<properties>
<spring.active>stg</spring.active>
</properties>
</profile>
<profile>
<id>prd</id>
<properties>
<spring.active>prd</spring.active>
</properties>
</profile>
</profiles>
</project>
配置了Profiles配置之后,就要创建相应的application.properties文件。
然后在application.properties中加入如下的配置:
spring.profiles.active=@spring.active@
完整配置就是上面的那样
因为分了环境:
所以再看看application-dev.properties和application-test.properties
application-dev.properties:
# 数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false
# 数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 用户名
spring.datasource.username=root
# 密码
spring.datasource.password=root
#自动提交 默认值true
spring.datasource.hikari.auto-commit=true
#此属性控制客户端(即您)将等待来自池的连接的最大毫秒数。 默认值30000(30秒)
spring.datasource.hikari.connection-timeout=30000
#此属性控制允许连接在池中闲置的最长时间。 默认值600000(10分钟),此设置仅适用于minimumIdle定义为小于maximumPoolSize。
spring.datasource.hikari.idle-timeout=600000
#此属性控制池中连接的最大生存期。 1800000(30分钟)
spring.datasource.hikari.max-lifetime=1800000
#该属性控制HikariCP尝试在池中维护的最小空闲连接数。不推荐使用这个,默认是和maximum-pool-size相等
spring.datasource.hikari.minimum-idle=5
#此属性控制池允许达到的最大大小,包括空闲和正在使用的连接。默认值10
spring.datasource.hikari.maximum-pool-size=5
#mybatis对应的映射文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
#mybatis对应的实体类
mybatis.type-aliases-package=com.wangye.spbootmybatis1.model
application-test.properties:
# 数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8&useSSL=false
# 数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 用户名
spring.datasource.username=root
# 密码
spring.datasource.password=root
#自动提交 默认值true
spring.datasource.hikari.auto-commit=true
#此属性控制客户端(即您)将等待来自池的连接的最大毫秒数。 默认值30000(30秒)
spring.datasource.hikari.connection-timeout=30000
#此属性控制允许连接在池中闲置的最长时间。 默认值600000(10分钟),此设置仅适用于minimumIdle定义为小于maximumPoolSize。
spring.datasource.hikari.idle-timeout=600000
#此属性控制池中连接的最大生存期。 1800000(30分钟)
spring.datasource.hikari.max-lifetime=1800000
#该属性控制HikariCP尝试在池中维护的最小空闲连接数。不推荐使用这个,默认是和maximum-pool-size相等
spring.datasource.hikari.minimum-idle=10
#此属性控制池允许达到的最大大小,包括空闲和正在使用的连接。默认值10
spring.datasource.hikari.maximum-pool-size=10
#mybatis对应的映射文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
#mybatis对应的实体类
mybatis.type-aliases-package=com.wangye.spbootmybatis1.model
这两个文件的区别就是数据库url和minimumIdle以及maximumPoolSize不同。那么来启动一下项目
注意:因为我简单的配置了一下日志所以日志会输出当前的环境。IDEA要指定启动环境就要像下面的图片配置:
我指定了test环境,也配置了简单的日志。
那么看看日志给我们输出了什么:
加下来我们改为dev:
看看输出日志:
由此看出spring正确的加载了改加载的文件,application.properties是默认加载的,然后根据active profiles的设置,会加载相应环境的application-XXX.properties文件。
那么Maven打包怎么办呢:
很简单像下面那样就好:
图中就指定了环境是test
那么,我们解压打包后的jar包看看application.properties的值
是不是这个文件的值就已经改了,那么这个jar包运行的时候也肯定会是以test环境配置的属性运行咯
总结:
笔者启动项目的方式设置参数只是其中的一种,但是是笔者喜欢的一种
maven打包的方式也是笔者喜欢的一种,也有很多种。如果大家想知道其他方式,找找度娘。