两种方式实现Springboot的多环境配置(二)——使用maven+springboot的功能实现

背景

有三个配置文件(.properties文件和.yml文件一样道理嘛),分别是:

application.properties(默认配置)文件内容:server.port=8080

application-dev.properties(开发环境)文件:server.port=8082

application-prod.properties(生产环境)文件:server.port=8081

方式一、使用Springboot自带profile管理功能(点我直达)

方式二、使用maven+springboot的功能实现

特别说明,该方式可以实现只打包指定的配置文件,多余的配置文件不会被打包。

步骤:

1、在application.properties中增加属性:

spring.profiles.active=@activatedProperties@

修改后的 application.properties

spring.profiles.active=@activatedProperties@
server.port=8080

2、因为要使用maven的功能,所以我们需要修改pom.xml文件,修改后的pom.xml内容(摘要了profiles和resources)

 

    <!--多环境配置用maven+profile来实现-->
    <profiles>
        <profile>
            <id>prod</id>
            <properties>
                <activatedProperties>prod</activatedProperties>
            </properties>
        </profile>

        <profile>
            <id>dev</id>
            <properties>
                <activatedProperties>dev</activatedProperties>
            </properties>
            <activation>
                <!-- 这套配置设为默认激活 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!--filtering代表变量替换,如果不设置filtering=true,
                那么application.properties中的@activatedProperties@就不会被替换-->
                <filtering>true</filtering>
            </resource>
        </resources>
		
		<!--如果需要排除多余的配置文件,可以加入如下配置,并且删除上面的<resources>节点
		<resources>
		    <resource>
			    <directory>src/main/resources</directory>
			    <excludes>
				    <exclude>**/application-*.*</exclude>
			    </excludes>
		    </resource>
		    <resource>
			    <directory>src/main/resources</directory>
			    <filtering>true</filtering>
			    <includes>
				    <include>**/application-${activatedProperties}.*</include>
			    </includes>
	    	</resource>
		</resources>
		-->		
		
    </build>

3、在IDE中运行时如何指定配置文件

在Active profiles中设置相应的配置即可:

设置为dev,表示使用application.properties + application-dev.properties

设置为prod,表示使用application.properties + application-prod.properties

如果application.properties和application-dev.properties中有重复的配置(比如我这里都配置了server.port),application-dev.properties中的配置会覆盖掉application.properties得配置,比如我在IDE中指定使用dev配置文件运行时的结果:

4、打包,打包相应的配置文件

#注意,这里打包的话,我们就需要指定-P参数

#将application-dev.properties打包
mvn clean package -Dmaven.test.skip=true -Pdev

#将application-prod.properties打包
mvn clean package -Dmaven.test.skip=true -Pprod

打包之后的application.properties中的@activatedProperties@就会被替换为相应的prod或者是dev

运行的时候直接使用:

java -jar .\springboot-study-0.0.1-SNAPSHOT.jar

当然,运行的时候就不能动态指定配置文件了,因为打包的时候就确定了,而且application.properties中的@activatedProperties@已经被替换成了prod或者dev

 

5、额外说明:

如果不需要打包其他多余配置文件(此时需要解除pom.xml中resources中的注释),那么打包之后,包里面就只有相应的配置文件了,比如指定了dev,那么相应的prod文件就不会被打包

pom.xml的resources摘要(注意,这是整个resources节点的摘要):

<resources>
    <!--先不要application-prod.properties和application-dev.properties文件-->
	<resource>
		<directory>src/main/resources</directory>
		<excludes>
			<exclude>**/application-*.*</exclude>
		</excludes>
	</resource>
    <!--加入相应的application-prod.properties或application-dev.properties文件
    并且执行变量替换-->
	<resource>
		<directory>src/main/resources</directory>
        <filtering>true</filtering>
		<includes>
			<include>**/application-${activatedProperties}.*</include>
		</includes>
	</resource>
</resources>

执行打包命令: 

mvn clean package -Dmaven.test.skip=true -Pdev 

打包之后的jar包文件如下,就只有application.properties 和 application-dev.properties 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值