最近打V想要给项目测试一些新功能的时候,需要在Spring Boot启动的时候自动生成一些数据。打V记得需要在resources文件夹下面创建一个data.sql文件,但却发现Spring Boot没有自动读取它,因此特别做了一些搜索整理并写下这篇博客。
Spring Boot 自动生成数据
当我们使用Spring Boot时,我们可以在resources文件夹下创建data.sql文件。当Spring Boot启动时,会自动读取该data.sql并执行里面的sql语句。
例如:
// data.sql
INSERT INTO users (id, username, email, password) VALUES (1, 'david', 'david@gmail.com', '123');
那么在Spring Boot启动的时候,就会往数据库的 users 表插入一条数据。
如果Spring Boot启动的时候没有自动读取data.sql怎么办?
当发生这种情况时,如果Spring Boot没有报错,那很有可能是配置的问题。
可以尝试在 application.properties 文件下面加入:
spring.datasource.initialization-mode=always
该设置的默认值是 embedded,表示只有当数据库是内嵌数据库时才会读取并运行data.sql里的语句。内嵌数据库就是运行在Spring Boot程序中的数据库,H2就是其中一种内嵌数据库。而当我们使用mysql作为我们的数据库时,通常是让Spring Boot连接到外部的mysql服务器,因此这就不属于内嵌数据库了。
改成always的话,无论数据库是什么类型的,Spring Boot都会读取data.sql文件。
参考出处:
Spring boot doesn’t load data to initialize database using data.sql
Spring 官方文档 Initialize a Database