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 { ... }
}
我完全理解 MapperScannerConfigurer
、SqlSessionFactoryBean
和 SqlSessionTemplate
来自 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
。
我正在尝试使用 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-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
。