如何在具有 JDBC 安全性的 Spring 引导中使用 Flyway?
How to use Flyway in Spring Boot with JDBC Security?
我想在我的 Spring 引导项目(使用当前的 V1.2.1.RELEASE)中使用 Flyway 作为数据库迁移处理的首选方式。
到目前为止,这工作正常,但是使用 JDBC 数据源与 Spring 安全性集成似乎覆盖了 Flyway 机制。
以下简单场景:
- Spring 引导 1.2.1
- PostgreSQL 9.4.1
- 根据Spring 安全文档
的用户、组和权限的 Flyway 迁移脚本
问题:
Flyway 迁移脚本未按预期在启动时执行。
可能原因:如果使用 Spring Boot 项目至少也在使用 JPA,那么 Flyway 似乎只在启动时执行。由于 Spring 安全性基于纯 JDBC,我尝试临时使用 JDBC 基于数据库初始化方案,如 Spring 引导文档(第 68.3 章)中所述,该方案有效,但是(如文档所述)这种方式就像 'poor man approach',我真的很想对这些包含 User/Group/Authorities 信息的表也使用 Flyway。
好的,经过进一步调查,我发现了问题所在:
事实上,在标准 Spring 引导项目中,安全上下文在任何基于 Flyway 的迁移发生之前被初始化。
通常这不是什么大问题,但我也使用 AuthenticationManagerBuilder
创建默认 admin
用户。这似乎是创建此类初始用户帐户的错误方法。
我想在我的 Spring 引导项目(使用当前的 V1.2.1.RELEASE)中使用 Flyway 作为数据库迁移处理的首选方式。
到目前为止,这工作正常,但是使用 JDBC 数据源与 Spring 安全性集成似乎覆盖了 Flyway 机制。
以下简单场景:
- Spring 引导 1.2.1
- PostgreSQL 9.4.1
- 根据Spring 安全文档 的用户、组和权限的 Flyway 迁移脚本
问题: Flyway 迁移脚本未按预期在启动时执行。
可能原因:如果使用 Spring Boot 项目至少也在使用 JPA,那么 Flyway 似乎只在启动时执行。由于 Spring 安全性基于纯 JDBC,我尝试临时使用 JDBC 基于数据库初始化方案,如 Spring 引导文档(第 68.3 章)中所述,该方案有效,但是(如文档所述)这种方式就像 'poor man approach',我真的很想对这些包含 User/Group/Authorities 信息的表也使用 Flyway。
好的,经过进一步调查,我发现了问题所在:
事实上,在标准 Spring 引导项目中,安全上下文在任何基于 Flyway 的迁移发生之前被初始化。
通常这不是什么大问题,但我也使用 AuthenticationManagerBuilder
创建默认 admin
用户。这似乎是创建此类初始用户帐户的错误方法。