Flyway & MyBatis: Java Spring-Boot 配置

Flyway & MyBatis: Java Configuration for Spring-Boot

我正在尝试使用 Spring-Boot、HSQLDB、Flyway 和 MyBatis 编写 Web 应用程序。我在没有 MyBatis 的情况下开始,每次我删除 HSQLDB.

时,Flyway 都会愉快地创建数据库

在我添加 MyBatis 之后一切都很好,直到我不得不在初始 SQL 文件中进行更改并删除数据库。现在我无法启动网络应用程序。看起来好像 Flyway 和 MyBatis 以某种方式相互依赖。

我的数据库配置:

@Configuration
public class DatabaseConfiguration {

  @Bean
  public DataSource dataSource() { ... }

  @Bean
  public DataSourceTransactionManager transactionManager() { ... }

  @Bean
  public static MapperScannerConfigurer mapperScannerConfigurer() { ... }

  @Bean
  public DataSourceInitializer dataSourceInitializer() throws Exception { ... }

  @Bean
  public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception { ... }

  @Bean
  public SqlSessionTemplate sqlSessionTemplate() throws Exception { ... }

}

我完全理解 MapperScannerConfigurerSqlSessionFactoryBeanSqlSessionTemplate 来自 MyBatis,所有 Flyway-stuff 都是由 Spring-Boot 完成的。据我所知,Flyway 需要一个 DataSource 而 MyBatis 需要一个数据库,其中 Flyway 脚本 运行 已经允许映射器的初始化。

我得到的错误是

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: MY_TABLE
### The error may exist in file [/home/work/Eclipse/com.sjngm.hs/target/classes/sqlmap/MyTableMapper.xml]
### The error may involve com.sjngm.hs.dao.mapper.MyTableMapper.getByName
### The error occurred while executing a query
### SQL: SELECT *       FROM MY_TABLE      WHERE Name = ?
### Cause: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: MY_TABLE

请注意,整个日志文件中没有迹象表明 Flyway 已经做了一些事情。另外,我在 HSQLDB 的文件中找不到任何 CREATE TABLE,这导致上面的错误提示找不到 table MY_TABLE.

我已经尝试将 dataSource() 移动到新配置 class,但这没有帮助。

我需要做什么来解决这种间接依赖?

帮助 dataSource() 成为 @FlywayDataSource