打开任何一个Spring Boot项目的配置文件,你最先看到的八成就是数据源那一坨。Spring Boot怎么配置数据库这个问题,看似简单,但真到项目上线、遇到性能瓶颈、或者接手别人代码的时候,你才会发现,当初随随便便写的那几行配置,藏着多少坑。今天就跟你聊聊这个,从头到尾捋一遍,保证都是实战里用得上的东西。

先说最基础的,也是90%的人每天都在用的方式——直接在application.properties或者application.yml里写死。你可能会说,这有什么好讲的?不就是url、username、password三件套吗?对,但就这三件套,我见过太多人栽跟头。比如那个driver-class-name,MySQL 8.0之后驱动类名变成了com.mysql.cj.jdbc.Driver,你要是还写旧的com.mysql.jdbc.Driver,项目启动直接给你报错。还有那个URL里的serverTimezone参数,不写的话,你连本地连数据库都会因为时区问题报错,更别说部署到服务器上了。所以,第一步,把这三样写对,是底线。
但写对不等于写明白。我见过一个团队,所有环境的数据库密码都明文写在配置文件里,还直接提交到Git仓库。后来项目开源了,数据库被人扫出来,数据全被删了,还留了勒索信。所以,基于Spring Boot的配置体系,你要学会用环境变量或者外部化配置来管理敏感信息。具体做法很简单,在配置里写${DB_PASSWORD}之类的占位符,然后在服务器上设置环境变量,或者用--spring.config.location指定外部配置文件。这样代码仓库里永远不会有真实的密码,出问题也容易排查是谁泄露的。这一步,是区分新手和熟练工的分水岭。
再说连接池。Spring Boot 2.x默认用的是HikariCP,这玩意儿快是快,但很多人在配置文件里压根不调它。默认情况下,HikariCP的maximumPoolSize是10,minimumIdle是10,connectionTimeout是300毫秒。看着挺合理是吧?但如果你是个高并发的应用,比如秒杀系统,10个连接根本不够用,数据库那边连接数被打满,应用就卡死了。反过来,如果你是个内部管理系统,一天就几十个人用,10个连接纯属浪费资源。所以,配置数据库,不只是配连接信息,更是配连接池参数。在yml里加个spring.datasource.hikari.maximum-pool-size=20,spring.datasource.hikari.minimum-idle=5,根据你的实际并发量去调,这才是负责任的做法。
接下来是那些容易被忽略的进阶配置。比如,你用了MyBatis,那就要配置mybatis.mapper-locations指定XML文件位置,mybatis.type-aliases-package指定实体类包路径。用了JPA的话,要配置spring.jpa.hibernate.ddl-auto,是update还是validate,还是none。这里面有个坑,我见不少人把ddl-auto设成update,结果生产环境上Hibernate自动改表结构,把字段类型给改了,数据全乱了。正确做法是,开发环境用update,测试环境用validate,生产环境直接设成none,表结构变更走专门的迁移脚本。这些配置都不是Spring Boot核心自带的,但你不配,项目就跑不顺。
还有个特别容易忽略的地方——多数据源。现在微服务架构这么流行,一个服务连两个数据库太常见了。比如订单库和用户库分开,或者读库和写库分离。Spring Boot默认只支持一个数据源,你要配置多个,就得自己写配置类。这时候你得定义两个DataSource的Bean,用@Primary标记主数据源,然后用@ConfigurationProperties分别绑定不同的配置前缀。比如spring.datasource.primary和spring.datasource.secondary。然后还要配两个JdbcTemplate或者两个SqlSessionFactory。这活儿不复杂,但特别繁琐,一旦配错,启动时就会报循环依赖或者bean找不到。我建议你写之前先画个图,理清楚哪个Bean对应哪个库,再动手。
再往深处说,就是性能监控和连接池的调优了。很多人配置完数据库,能跑通就完事了,从没看过连接池的实际使用情况。其实你可以在配置里打开HikariCP的日志,加一个spring.datasource.hikari.leak-detection-threshold=600,这样如果连接泄漏,超过60秒就会在日志里报警。还有,你可以在application.yml里配置spring.datasource.hikari.connection-test-query=SELECT 1,确保连接在借出前是健康的。这些参数看着不起眼,但能帮你提前发现很多问题,尤其是那种“系统跑几天就变慢”的疑难杂症,往往就是连接池配置不合理导致的。
跟你分享一个我踩过的大坑。有一次部署到Linux服务器上,项目启动报错,说连接数据库超时。我本地跑得好好的,怎么上服务器就不行了?查了半天,发现是服务器防火墙没开3306端口。还有一次,数据库服务器上配置了白名单,只允许特定IP访问,我忘了加新服务器的IP,结果也是连不上。这些跟Spring Boot本身没关系,但都算在“配置数据库”这个范畴里。所以,你配置完数据源,别急着写代码,先在本机测一下能否连通,再部署到测试环境,上生产。每一步都验证,才能保证万无一失。
回到最开始那个问题,Spring Boot怎么配置数据库?其实没有一劳永逸的答案。它就像你装修房子,基础的水电——连接信息和连接池——必须扎实,墙面的美观——比如多数据源和性能调优——可以慢慢打磨。但核心原则就一条:配置要清晰,敏感信息要安全,参数要贴合业务。你把这几条做到了,不管项目怎么变,数据库这块都不会给你拖后腿。下次再有人问你这个问题,你可以把这篇文章甩给他,省得你一遍遍解释。


