SpringBoot项目搭建demo配置多环境(一)
- 快速创建下载项目Spring Initializr
- springBoot配置不同环境和打包配置
- 文件目录如下
- 最外层配置文件
- 代码如下:
- 问什么可以使用@server.port@而不是{server.port}
- 环境配置文件
- 代码如下:
- 配置pom.xml
- 代码如下:
- 设置配置文件中占位符@
- 配置多个环境
- 配置编译和打包目录设置
- 启动、编译和打包
- 直接通过main方法启动
- 使用maven打包
快速创建下载项目Spring Initializr
Spring Initializr:https://start.spring.io/ 使用以上网址,使用勾选组件的方式,最终点击生成项目即可下载项目zip包,解压后eclipse导入maven项目即可。
springBoot配置不同环境和打包配置
文件目录如下
最外层配置文件
也就是src/main/resource目录下的application.properties文件,这是系统使用文件,也可以添加其他配置文件,例如db.propertioes、redis.propertioes等
代码如下:
#项目名称
app.name=demo
# 运行端口tomcat
server.port=@server.port@
# 最大线程数
server.tomcat.max-threads=@server.tomcat.max-threads@
environment=@environment@
app.name=demo 就是不因环境变化的配置,不管是dev还是product,appname都叫做demo 这样可以直接配置在此
server.port=@server.port@ 就是@server.port@是根据动态获取的config中得配置内容,这样配置dev和product的不同属性即可动态加载和打包
问什么可以使用@server.port@而不是{server.port}
项目maven继承了spring-boot-starter-parent,并且spring默认配置文件接受的占位符也是{},所以mavenfilter{}占位符就被spring的maven pom替换掉了,变成了@…@,我们可以通过pom.xml中 resource.delimiter来覆盖它,下面有介绍。
环境配置文件
也就是src/main/resource/config目录下的dev|product application.properties文件,这是具体环境配置文件,也可以添加其他配置文件,例如db.propertioes、redis.propertioes等,这样在系统加载时会自动将src/main/resource/application.properties文件中@server.port@去环境配置文件src/main/resource/config/dev/application.properties下查找实际配置的值。
代码如下:
# 运行端口tomcat
server.port=8081
# 最大线程数
server.tomcat.max-threads=100
environment=test
配置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.lushunde.springboot</groupId>
<artifactId>com-lushunde-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>主要是一些练习demo</description>
<properties>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<tomcat.version>8.5.30</tomcat.version>
<start-class>com.lushunde.springboot.Application</start-class>
</properties>
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 生产环境 -->
<id>product</id>
<properties>
<profiles.active>product</profiles.active>
</properties>
<!-- <activation>
<activeByDefault>true</activeByDefault>
</activation> -->
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<directory>${basedir}/target</directory>
<finalName>ds_param_${profiles.active}</finalName>
<filters>
<filter>src/main/resources/config/${profiles.active}/application.properties</filter>
</filters>
<resources>
<resource>
<!-- 包含java目录下的xml配置文件 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<!-- 包含java目录下的xml配置文件 -->
<directory>src/main/resources</directory>
<includes>
<include>*.xml</include>
<include>*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>static/**</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
设置配置文件中占位符@
使用此处配置即可:<resource.delimiter>@</resource.delimiter>
配置多个环境
<profiles> 配置多个环境
<profile> 具体环境
<!-- 本地开发环境 -->
<id>dev</id> 环境名称,编译、打包的时候使用的 -P参数平成 mav clean package -Pdev
<properties>
<profiles.active>dev</profiles.active> 下面配置是使用的文件站位名称,可以直接使用{profiles.active}获取dev的值
</properties>
<activation>
<activeByDefault>true</activeByDefault> 默认使用的配置环境
</activation>
</profile>
</profiles>
具体解释:
<profiles> 配置环境
<profile> 具体环境,可以多个
<id>dev</id> 环境名称,编译、打包的时候使用的 -P参数平成 mav clean package -Pdev
<profiles.active>dev</profiles.active> 下面配置是使用的文件站位名称,可以直接使用{profiles.active}获取dev的值
<activeByDefault>true</activeByDefault> 默认使用的配置环境
配置编译和打包目录设置
<build>
<directory>${basedir}/target</directory> 打包的目录
<finalName>ds_param_${profiles.active}</finalName> jar包的名称,会根据不同环境添加后缀
<filters>
<filter>src/main/resources/config/${profiles.active}/application.properties</filter> 使用切换的环境加载配置文件值
</filters>
<build>
详细解释:
<directory>${basedir}/target</directory> 打包的目录,只能配置一个
<finalName>ds_param_${profiles.active}</finalName> jar包的名称,会根据不同环境添加后缀
<filter>src/main/resources/config/${profiles.active}/application.properties</filter> 使用切换的环境加载配置文件值,可以配置多个文件
启动、编译和打包
直接通过main方法启动
主要看pom文档中得如下配置,如果使用当前环境则不注释,不使用当前环境则注释一下配置
<activation>
<activeByDefault>true</activeByDefault>
</activation>
使用maven打包
需要使用 -P+参数指定 打包使用哪个回环境