Spring Boot 数据库初始化只有一次
Posted
技术标签:
【中文标题】Spring Boot 数据库初始化只有一次【英文标题】:Spring Boot database initialization only one time 【发布时间】:2018-05-02 08:28:16 【问题描述】:我有一个 Spring Boot 后端应用程序,我正在寻找一种在 mysql 数据库中插入初始化数据的方法,但仅限于每次创建表时。我用 data.sql 做到了,但每次服务器启动时都会插入数据。我希望我的问题很清楚。谢谢你的时间:)
【问题讨论】:
为此使用 Flyway 或 Liquibase 之类的东西。 或者先做个count查询,看看表有没有数据。 【参考方案1】:Spring Boot 提供的Database initialising 只能用于嵌入式数据库。所以它或多或少假设您必须在每次启动应用程序时初始化数据库。
对于持久性数据库的正确初始化和演变,请使用 Flyway 或 Liquibase
【讨论】:
我问这个问题可能已经太久了。但无论如何我还是想感谢你。 :)【参考方案2】:它在不使用 Flyway 的情况下对我正常工作。
我有一个 Spring Boot 应用程序和 Mysql 数据库。我有多个 data.*.sql 文件。 application.properties 具有以下属性。
## To enable reading data from multiple files
spring.datasource.data = classpath:data.*.sql
# Initialize the datasource with available DDL and DML scripts
spring.datasource.initialization-mode=always
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
其中一个data.*.sql文件:
INSERT IGNORE INTO complaintPriority(name) VALUES('EMERGENCY');
INSERT IGNORE INTO complaintPriority(name) VALUES('HIGH');
INSERT IGNORE INTO complaintPriority(name) VALUES('MEDIUM');
模型类的内容:
@Entity
@Access(value=AccessType.FIELD)
@Table(name = "complaintPriority", uniqueConstraints =
@UniqueConstraint(columnNames =
"complaintPriorityId"
)
)
public class ComplaintPriority
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long complaintPriorityId;
// Other variables and methods
【讨论】:
以上是关于Spring Boot 数据库初始化只有一次的主要内容,如果未能解决你的问题,请参考以下文章
一次只有一个用户使用整个 Web 应用程序 - Spring Boot
Spring Boot + Redis 解决重复提交问题,还有谁不会??
使用 Liquibase 为 Spring Boot 应用程序中的单元测试初始化内存 H2
从 Spring Boot 中只有客户拥有的数据库中获取数据的正确方法