如何优雅地完成项目数据库的初始化

张开发
2026/4/18 19:47:16 15 分钟阅读

分享文章

如何优雅地完成项目数据库的初始化
简介当项目在一个新的环境启动或部署时必不可少的步骤是完成数据库的初始化将所需要的数据库表可能还有一些初始的配置数据一次性写入到数据库中常规的做法是将初始化脚本整理到项目的资源目录中提醒开发程序员或者运维人员在部署时手动执行本文介绍如何优化地完成这个动作将初始化脚本写入到项目的配置文件中项目启动时自动执行该脚本完成数据库的初始化配置简单来说是在 application.yml 文件中增加下面这个配置指定项目启动时加载的数据库脚本spring:# 数据库连接配置先连接到MySQL服务器不指定数据库datasource:url:jdbc:mysql://localhost:3306/?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueusername:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Driver# 核心配置自动执行SQL初始化数据库sql:init:# 开启SQL初始化SpringBoot 2.5 默认关闭必须手动开启mode:always# 指定要执行的SQL路径多个用逗号分隔schema-locations:classpath:init.sql# 编码解决中文乱码encoding:utf-8init.sql内容如下是数据库的初始化脚本注意这个脚本应设计成幂等的即多次执行效果相同具体来说就是创建前先判断是否存在存在了就不创建不存在才创建-- -- 数据库初始化脚本-- 优雅初始化数据库演示项目-- -- 创建数据库如果不存在CREATEDATABASEIFNOTEXISTSdb_elegantDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 使用该数据库USEdb_elegant;-- 创建用户表如果不存在CREATETABLEIFNOTEXISTSdb_elegant.user(idBIGINTNOTNULLAUTO_INCREMENTCOMMENT主键ID,usernameVARCHAR(50)NOTNULLCOMMENT用户名,emailVARCHAR(100)DEFAULTNULLCOMMENT邮箱,ageINTDEFAULTNULLCOMMENT年龄,created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT创建时间,updated_atDATETIMEDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),UNIQUEKEYuk_username(username))ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT用户表;-- 创建商品表如果不存在CREATETABLEIFNOTEXISTSdb_elegant.product(idBIGINTNOTNULLAUTO_INCREMENTCOMMENT主键ID,nameVARCHAR(100)NOTNULLCOMMENT商品名称,descriptionVARCHAR(500)DEFAULTNULLCOMMENT商品描述,priceDECIMAL(10,2)NOTNULLDEFAULT0.00COMMENT价格,stockINTNOTNULLDEFAULT0COMMENT库存,created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT创建时间,updated_atDATETIMEDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT更新时间,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT商品表;-- 插入测试数据数据不存在时才插入INSERTIGNOREINTOdb_elegant.user(username,email,age)VALUES(张三,zhangsanexample.com,25),(李四,lisiexample.com,30),(王五,wangwuexample.com,28);INSERTIGNOREINTOdb_elegant.product(name,description,price,stock)VALUES(iPhone 15 Pro,苹果最新款手机,8999.00,100),(MacBook Pro 14英寸,M3芯片专业笔记本,14999.00,50),(AirPods Pro,主动降噪耳机,1899.00,200);-- 输出初始化完成信息SELECT数据库初始化完成ASmessage;测试启动项目试一下它自己就把数据库脚本执行了而且后续接口的查询也都能查到该数据库的数据因为在脚本中指定了数据库USE db_elegant;

更多文章