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

如何在具有JDBC安全性的Spring Boot中使用Flyway?,jdbc,spring-security,spring-boot,flyway,Jdbc,Spring Security,Spring Boot,Flyway,我希望在Spring Boot项目中使用Flyway作为数据库迁移处理的首选方式(使用当前的V1.2.1.RELEASE) 到目前为止,这一切都很好,但是使用JDBC数据源与Spring Security的集成似乎覆盖了Flyway机制 以下是简单的场景: 弹簧靴1.2.1 PostgreSQL 9.4.1 根据Spring安全文档,用户、组和机构的Flyway迁移脚本 问题: Flyway迁移脚本在启动时未按预期执行 可能的原因:如果using Spring Boot项目至少也在使用JPA

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

到目前为止,这一切都很好,但是使用JDBC数据源与Spring Security的集成似乎覆盖了Flyway机制

以下是简单的场景:

  • 弹簧靴1.2.1
  • PostgreSQL 9.4.1
  • 根据Spring安全文档,用户、组和机构的Flyway迁移脚本
问题: Flyway迁移脚本在启动时未按预期执行


可能的原因:如果using Spring Boot项目至少也在使用JPA,那么Flyway似乎只在启动时执行。由于Spring安全性是基于普通JDBC的,所以我尝试临时使用Spring引导文档(第68.3章)中描述的基于JDBC的数据库初始化方案,该方案有效,但是(如文档所述)这种方法类似于“穷人方法”,我真的希望对这些包含用户/组/权限信息的表也使用Flyway。

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

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


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

flyway的使用与JPA或现有的任何技术无关(如果是一个bug,至少不应该如此)。发布您尝试过但不起作用的配置,并进一步解释不起作用的部分。似乎在Flyway迁移发生之前已初始化安全上下文:创建名为“securityFilterChainRegistration”的bean时出错:org.postgresql.util.psqleException:错误:关系“用户”根据日志和数据库不存在,未发生Flyway迁移。如果我临时禁用自定义WebSecurity配置适配器,则会在应用程序启动时按预期执行为用户和组创建所需表的Flyway迁移。因此,我猜想,当创建spring应用程序上下文时,会出现某种排序问题。您不应该这样做,尤其是在配置类中,因为它们很早就初始化了。我已经在其他地方说过,这样做不好,最好放在
ApplicationListener
中,在初始化所有内容后调用它。