# SpringBoot 多环境部署 profile(开发环境/生产环境)
# 多环境部署
基本上有以下几个环境:
开发环境:dev
开发的时候使用
测试环境:test
部署到测试环境使用
生产环境:prod
生产环境使用
还要一些公司分得细,在测试环境和生产环境中间还有一个 预发布环境
分不同的环境,目的是需要修改一些配置,比如数据库配置、消息队列配置等。
# boot 多环境支持 profile
- application.yml:主配置文件
application-{name}.yml
:环境配置(挂件)
通过配置项: spring.profiles.active:{name}
来激活对应的配置文件
在 application.yml 中增加 dev 的激活,也就是说:默认是 dev 环境
spring:
profiles:
active: dev
1
2
3
2
3
application-prod.yml
spring:
datasource:
url: jdbc:mysql://192.168.56.108:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
username: root
password: root
1
2
3
4
5
2
3
4
5
当前项目比较简单,要修改的配置文件也比较少。这里主要说配置文件技巧:
application.yml:保留全部的配置,只有开放环境需要配置的除外
比如:myabtis 的日志打印,只有开放环境下需要配置,如果默认配置中也配置上了,那么在 prod 里面就无法取消了,因为如果是空值,应该会报错
mybatis: type-aliases-package: cn.mrcode.foodiedev.pojo # 实体层 mapper-locations: classpath:mapper/*.xml # mapper 层 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
1
2
3
4
5那么这种情况下如何做呢?默认配置只保留如下配置即可,剩余在在 dev 中开启,而 prod 中不需要,则不配置即可
mybatis: type-aliases-package: cn.mrcode.foodiedev.pojo # 实体层 mapper-locations: classpath:mapper/*.xml # mapper 层
1
2
3application-dev.yml:只需要在 dev 环境下需要更改的配置
这样做的好处是:
当你的配置很多的时候,各种环境能比较清晰的知道哪些配置是更改了的
当新增或则减少配置时,能话最小的代价去维护
比如:公共配置中的配置,在 dev 和 prod 中都没有覆盖,那么只需要维护公共配置文件中的内容即可,而不需要维护所有环节的配置文件内容
# profiles 需要更改的地方梳理
由于当前阶段项目中某些配置写得不够好,还需要手动硬编码,这里做一个梳理
- 在 prod 配置文件中修改的有:
- 数据源配置
- mybatis 日志打印
- 项目中直接需要硬编码改变的配置有
cn.mrcode.foodiedev.resource.FileUpload
图片加载的配置文件,图片存储目录和图片服务器路径- BaseController 中硬编码的支付中心地址、回调地址信息