本文参考文章来自:Spring-Boot application.yml 文件拆分,实现 maven 多环境动态启用 Profiles
1.环境分为:dev prod test【以yml配置】:
建4份文件:application.yml application-dev.yml application-prod.yml application-test.yml
application.yml内容很少只有:
#执行的命令内容: java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置
#yml文件写法:之后一定需要空格
spring:
profiles:
active: #spring.profiles.active#
application-dev.yml application-prod.yml application-test.yml这三个文件分别都是各自环境的基本配置(以application-test.yml 为例子):
#执行的命令内容: java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置
#yml文件写法:之后一定需要空格
spring:
datasource:
url: jdbc:mysql://localhost/stuproject?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
username: root
password:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initialSize: 1
minIdle: 3
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;druid.stat.logSlowSql:true
# 合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
# mybatis配置
mybatis:
mapper-locations: classpath*:/mapper/*Mapper.xml
# 日志配置
logging:
level:
root: info
#mapper层 sql日志 DEBUG级别输出
com.example.ljia.mapper: debug
config: classpath:logback-boot.xml
logName: ljia
path: D:/ljia/logs
# redis配置
redis:
hostName: 127.0.0.1
password: 123456
database: 0
port: 6379
timeout: 0
pool:
maxTotal: 200
maxWaitMillis: 10000
maxIdle: 50
minIdle: 10
testOnBorrow: true
#durid配置内容
druid:
allow:
ip: 127.0.0.1
deny:
ip:
login:
user: root
password: samlai
reset:
enable: false
file:
path: D:/TestFile/file
base.url: http://localhost:8080/
#ip地址
project:
ip: http://127.0.0.1:8080
qr: /qr
2.pom文件的配置有2处:
<!-- profiles环境 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
<!--默认为环境打包方式 : spring boot一定需要制定相应的环境来打包,不然启动会出错-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
<!-- springboot profile 打包内容 -->
<!--参考文章来自: https://yulaiz.com/spring-boot-maven-profiles/ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</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>
</plugins>
3.打包war包
第一先在pom文件设置:war方式打包,而不jar
<!-- 指定为war包内容将被tomcat所指定 -->
<packaging>war</packaging>
第二步application入口需要处理下:
@SpringBootApplication
@MapperScan("com.example.ljia.mapper")
public class LjiaApplication extends SpringBootServletInitializer {
/**
* 测试直接用main启动(并指定相应的profile环境值)
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(LjiaApplication.class, args);
}
/**
* Tomcat重要的配置内容
* tomcat容器发布入口 【线上发布使用的,步骤也是:mvn -P 对应的环境 再进行放入的运行webapp目录下】
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
return applicationBuilder.sources(LjiaApplication.class);
}
}
第三步执行maven指令:
mvn clean package -Dmaven.test.skip=true -Ptest
mvn clean package -Dmaven.test.skip=true -Pdev
mvn clean package -Dmaven.test.skip=true -Pprod
4.直接发布到线上,跟运行application一致