【问题标题】:Flyway & MyBatis: Java Configuration for Spring-BootFlyway & MyBatis:Spring-Boot 的 Java 配置
【发布时间】:2017-01-04 00:32:51
【问题描述】:

我正在尝试使用 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 的东西都是由 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,这导致上述错误说它找不到表 MY_TABLE。

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

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

【问题讨论】:

    标签: spring-boot mybatis flyway


    【解决方案1】:

    帮助将dataSource() 变成@FlywayDataSource

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 2018-09-09
      • 1970-01-01
      • 2021-06-14
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      相关资源
      最近更新 更多