【发布时间】: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 { ... }
}
我完全理解MapperScannerConfigurer、SqlSessionFactoryBean 和SqlSessionTemplate 来自 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