我将DataSource定义为bean:
@Bean(name="dataSource") public DriverManagerDataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:~/myDB"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; }
它工作完美,但是我需要为数据库创建指定模式并在其上加载数据。是否有机会像Spring Data一样执行两个脚本(模式脚本和数据脚本)?我发现的唯一的东西是datasource.setSchema()
,以及我所担心的,我必须指定它的完整路径。如果我的模式脚本位于src/main/resources/
路径中,那么如何指定它呢?(我确实做了,文档怎么说,但失败并显示一条消息)
发生意外错误(类型=内部服务器错误,状态= 500)。org.springframework.jdbc.CannotGetJdbcConnectionException:无法获取JDBC连接。嵌套的异常是org.h2.jdbc.JdbcSQLException:找不到架构“〜/ schema-h2.sql” [90079-193]
谢谢你的建议
您可以执行以下操作:
import org.springframework.jdbc.datasource.init.DatabasePopulator; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; @Bean(name="dataSource") public DriverManagerDataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:~/myDB"); dataSource.setUsername("sa"); dataSource.setPassword(""); // schema init Resource initSchema = new ClassPathResource("script/schema.sql"); DatabasePopulator databasePopulator = new ResourceDatabasePopulator(initSchema); DatabasePopulatorUtils.execute(databasePopulator, dataSource); return dataSource; }