实现原理:在打包的时候,装入不同环境的配置文件。
1、父工程pom文件
注意点:<delimiter>@</delimiter>不可缺少,后面在application.yml中会用到。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>@</delimiter> <!-- 替换符 -->
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>local</id>
<properties>
<spring.active>local</spring.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>dev</id>
<properties>
<spring.active>dev</spring.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.active>prod</spring.active>
</properties>
</profile>
</profiles>
2、子工程
注意点:<filtering>true</filtering> 不可缺少,否则运行会报错
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
3、application.yml(以---进行环境拆分)
注意点:@spring.active@就是在上面定义的分隔符,对应的值在父级工程的pom文件里,默认为local。
spring:
profiles:
active: @spring.active@
---
server:
port: 9090
spring:
profiles: local
datasource:
url: jdbc:mysql://127.0.0.1:3306/demo?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
filters: log4j,wall,mergeStat
hikari:
readOnly: false
connectionTimeout: 60000
idleTimeout: 60000
validationTimeout: 3000
maxLifetime: 60000
loginTimeout: 5
maximumPoolSize: 60
minimumIdle: 10
redis:
database: 0
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
---
server:
port: 9090
spring:
profiles: produce
datasource:
url: jdbc:mysql://127.0.0.1:3306/demo?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
filters: log4j,wall,mergeStat
hikari:
readOnly: false
connectionTimeout: 60000
idleTimeout: 60000
validationTimeout: 3000
maxLifetime: 60000
loginTimeout: 5
maximumPoolSize: 60
minimumIdle: 10
redis:
database: 0
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
4、以拆分文件的形式也可以
application.yml
spring:
profiles:
active: @spring.active@
application-local.yml
server:
port: 9090
spring:
profiles: local
datasource:
url: jdbc:mysql://127.0.0.1:3306/light_tool?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
filters: log4j,wall,mergeStat
hikari:
readOnly: false
connectionTimeout: 60000
idleTimeout: 60000
validationTimeout: 3000
maxLifetime: 60000
loginTimeout: 5
maximumPoolSize: 60
minimumIdle: 10
redis:
database: 0
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
application-prod.yml
server:
port: 9090
spring:
profiles: prod
datasource:
url: jdbc:mysql://127.0.0.1:3306/light_tool?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
filters: log4j,wall,mergeStat
hikari:
readOnly: false
connectionTimeout: 60000
idleTimeout: 60000
validationTimeout: 3000
maxLifetime: 60000
loginTimeout: 5
maximumPoolSize: 60
minimumIdle: 10
redis:
database: 0
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
5、Maven打包方式
-P指的是环境
mvn package -Dmaven.test.skip=true -P prod -f pom.xml
网友评论