Spring Boot 不同开发者协作时使用不同数据库配置?

在多人协作开发一个spring boot的项目的时候,不同开发者用于测试的本地服务器配置可能是不相同的,例如:开发者A本地数据库的密码是123456 B开发者本地数据库的密码是root,如果他们修改的是同一个application.yaml的话,代码就会起冲突。

想知道能不能单独的写一份自己的数据库配置,这份配置添加到.gitignore中,不会上传到git上,然后spring boot连接数据库时判断有没有这样一份配置,如果有的话优先使用这份配置。

阅读 3.5k
3 个回答

利用profiles只能说确实能达到这样的目的。
实际上 spring-boot 加载配置会查找几个目录:

Config locations are searched in reverse order. By default, the configured locations are classpath:/,classpath:/config/,file:./,file:./config/. The resulting search order is the following:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

加载顺序是反过来的,所以你只需要在 workDir 中创建相同的配置文件即可覆盖 classpath 目录中相同的配置。

图片描述

如上图 config 目录中的配置会覆盖 classpath 中的配置,并且这个配置无需使用版本控制器管理,可以实现完全的定制化并且无任何冲突。

  1. 就像@wt1187982580 说的,可以用 --spring.profiles.active来控制启动的是哪个profile
  2. 假如默认的配置文件是application.yml,你可以用application-xxx.yml来覆盖在application.yml里的设置,只需要在启动的时候添加上--spring.profiles.active=xxx, 比如: java -jar my_api.jar --spring.profiles.active=xxx
  3. 平时开发也会有测试和发布的配置,比如下图:
    clipboard.png
  4. idea可以配置默认使用的配置文件是哪个(如图):
    clipboard.png

可以使用多个 yml文件来配置
application-dev.yml
使用 spring.profiles.active

application.yml

spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
推荐问题