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 中只有客户拥有的数据库中获取数据的正确方法

[Spring Boot] 2. Spring Boot 启动过程定制化

[Spring Boot] 2. Spring Boot 启动过程定制化