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配置不同环境和打包配置

文件目录如下

springboot启动 设置环境变量 springboot指定环境_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+参数指定 打包使用哪个回环境

springboot启动 设置环境变量 springboot指定环境_maven_02