Spring Boot数据库初始化只有一次

时间:2018-05-02 08:28:17

标签: java database spring-boot

我有一个spring boot后端应用程序,我正在寻找一种在MySQL数据库中插入初始化数据的方法,但只在每次创建表时。我使用data.sql做了这个,但每次服务器启动时都会插入数据。我希望我的问题很清楚。谢谢您的时间:))

3 个答案:

答案 0 :(得分:0)

您可以通过Main应用程序实施CommandLineRunner

CommandLineRunner有一个run(..),并在应用程序启动时调用它。

因此,您第一次可以使用此接口插入数据,并在数据插入数据库时​​,从主类中删除此接口。

答案 1 :(得分:0)

Spring Boot提供的

Database initialising仅用于嵌入式数据库。所以它或多或少地假定你必须在每次启动应用程序时初始化数据库。

对于持久性数据库的正确初始化和发展,请使用FlywayLiquibase

答案 2 :(得分:0)

它在我不使用 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