如何在具有 JDBC 安全性的 Spring 引导中使用 Flyway?

How to use Flyway in Spring Boot with JDBC Security?

我想在我的 Spring 引导项目(使用当前的 V1.2.1.RELEASE)中使用 Flyway 作为数据库迁移处理的首选方式。

到目前为止,这工作正常,但是使用 JDBC 数据源与 Spring 安全性集成似乎覆盖了 Flyway 机制。

以下简单场景:

问题: Flyway 迁移脚本未按预期在启动时执行。

可能原因:如果使用 Spring Boot 项目至少也在使用 JPA,那么 Flyway 似乎只在启动时执行。由于 Spring 安全性基于纯 JDBC,我尝试临时使用 JDBC 基于数据库初始化方案,如 Spring 引导文档(第 68.3 章)中所述,该方案有效,但是(如文档所述)这种方式就像 'poor man approach',我真的很想对这些包含 User/Group/Authorities 信息的表也使用 Flyway。

好的,经过进一步调查,我发现了问题所在:

事实上,在标准 Spring 引导项目中,安全上下文在任何基于 Flyway 的迁移发生之前被初始化。

通常这不是什么大问题,但我也使用 AuthenticationManagerBuilder 创建默认 admin 用户。这似乎是创建此类初始用户帐户的错误方法。