【问题标题】:Spring Boot: How do I specify execute order of different schema.sql files?Spring Boot:如何指定不同 schema.sql 文件的执行顺序?
【发布时间】:2020-05-15 07:00:30
【问题描述】:

我在spring-session-jdbc 的spring_session 表上创建了一个具有外键约束的表。主要动机是 spring-session 将删除行,以便它会级联并删除与实际会话关联的条目。它变成了一个“只能在我的机器上工作”的问题,因为只有我在启动开发服务器时已经准备好了表。只有当其他人先注释掉表,初始化服务器,然后恢复并再次执行时,它才会起作用。否则,nested exception is java.sql.SQLException: Failed to open the referenced table 'spring_session'。

我认为解决方案是指定初始化 sql 文件的运行顺序(或依赖关系)。经过一番搜索,我找不到该设置,所以我在这里。

schema.sql:

drop table if exists foo;
create table if not exists foo (
    sid char(36) not null,
    foreign key (sid) references spring_session (session_id) on delete cascade,
    -- other columns and constraints
);

可能的解决方法:

解决方法 #1:在 data.sql 中添加 alter table add constraint 语句,如 this。

解决方法 #2:获取 spring-session-jdbc 的 schema.sql 并将其放入我的 schema.sql,然后将 spring.session.jdbc.initialize-schema=never 设置为 application.properties。

【问题讨论】:

    标签: spring spring-boot spring-session


    【解决方案1】:

    你可以试试flyway,它可以通过给它们一个版本号来管理你的init sql文件。并且可以记录哪些sql已经被执行,所以如果再添加一个sql文件,它会执行你添加的sql,传递其他已经执行的sql。

    【讨论】:

    • 虽然这肯定行得通,但我也必须管理 spring-session schema.sql 的迁移。由于项目范围如此之小,我宁愿使用我刚刚添加到问题中的解决方法 #2。
    猜你喜欢
    • 2015-03-11
    • 2015-12-30
    • 2021-10-06
    • 2018-08-26
    • 2017-10-16
    • 2019-07-05
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多