Spring Boot 两种方式配置不同的开发环境(开发、测试、生产)
今天新搭了一个项目,趁此机会,把springboot项目启动不同配置的环境(开发、测试、生产)复习一下,,总结两种方法,两种方法大同小异,其实也差不多。
第一种:
1.1.1、新增四个配置文件
application.yml是默认加载的,只需要把spring.profiles.active: 指向你需要的yml,就可以启动你想要启动的配置文件。
1.2.1、修改application.yml
在上面基础上,可以更灵活一点,就是读pom,
那上面得做如下的修改:
1.2.2、修改pom
然后修改pom,如下:
<profiles> <profile> <id>dev</id> <properties> <!-- 环境标识,需要与配置文件的名称相对应 --> <activatedProperties>dev</activatedProperties> </properties> </profile> <profile> <id>test</id> <properties> <activatedProperties>test</activatedProperties> </properties> </profile> <profile> <id>prod</id> <properties> <activatedProperties>prod</activatedProperties> </properties> <activation> <!-- 默认环境 --> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles> <build> <resources> <resource> <!--配置文件路径 --> <directory>src/main/resources</directory> <!--这里对应项目存放配置文件的目录--> <!--开启filtering功能 必须加上,不然yml无法识别@符 --> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.0.RELEASE</version> </plugin> </plugins> </build>
其中,pom里面的 activatedProperties 对应的就是application.yml里面的 @activatedProperties@
1.2.3、配置activeByDefault参数

只需要把这三行代码放到你想启动的环境下面就可以了。
避坑一:不能识别符号@,在步骤中配置的@activatedProperties@,启动会报异常,不能识别@符号。解决方法:
在pom.xml中设置filtering为true
<filtering>true</filtering>
第二种:
原理和第一种大同小异。相对来说更简单一点。 名字可以一样,包的位置不同
2.1.2、修改pom文件
<profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> <!-- 是否默认 true表示默认--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> </properties> </profile> <profile> <!-- 生产环境 --> <id>prod</id> <properties> <profiles.active>prod</profiles.active> </properties> </profile> </profiles> <build> <resources> <resource> <directory>src/main/resources/config</directory> <!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 --> <excludes> <exclude>test/*</exclude> <exclude>prod/*</exclude> <exclude>dev/*</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources/config/${profiles.active}</directory> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
最后一步和方法一样,只需要把
<!-- 是否默认 true表示默认--> <activation> <activeByDefault>true</activeByDefault> </activation>
放到不同的位置就好了。
这样就ok了!
个人感觉项目本地启动的时候才会涉及到上面的问题,如果项目发布到服务器上面,那么重要的就不是启动了,而是打包了,如何打自己想要的包(测试、开发环境),只需要一条命令就可以了
-Pdev 或者 -Pprod指向一下就可以了。
避坑二:我开始在【datasource】下面配置【profiles】,spring已启动就报错:后来把【profiles】配置上移到Spring第一个配置就不报错了。很奇怪
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
datasource:
type: com.zaxxer.hikari.HikariDataSource
profiles:
active: develop #需要使用的配置文件的后缀
END!!!
标签:
Spring
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库