Spring 引导:如何指定不同模式.sql文件的执行顺序?



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

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

架构.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语句。

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

你可以试试Flyway,它可以通过给它们一个版本号来管理你的初始化SQL文件。它可以记录已经执行了哪些sql,所以如果添加另一个sql文件,它将执行你添加的sql,传递其他已经执行的sql。

最新更新