Closed superlyao closed 4 years ago
JDK Version(required): 1.8
SpringBoot Version(required): 2.1.2.RELEASE
dynamic-datasource-spring-boot-starter Version(required):3.1.1
druid Version(optional):
项目在执行单元测试的时候,需要初始化多个schema,配置如下
url: jdbc:h2:mem:h2/test username: sa password: 123456 driver-class-name: org.h2.Driver schema: h2/schema/*.sql
以上的配置会下面的警告,导致单元测试执行失败:
[2020-06-09 18:26:33.939] [] [aic-generaldataquery-server] [] [] [WARN] [com.baomidou.dynamic.datasource.support.ScriptRunner] [67] - [could not find schema or data file h2/schema/*.sql]
查看源码发现,获取schema文件使用的ClassPathResource
// com.baomidou.dynamic.datasource.support.ScriptRunner public void runScript(DataSource dataSource, String location) { if (StringUtils.hasText(location)) { ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setContinueOnError(continueOnError); populator.setSeparator(separator); if (location.startsWith("classpath:")) { location = location.substring(10); } ClassPathResource resource = new ClassPathResource(location); if (resource.exists()) { populator.addScript(resource); try { DatabasePopulatorUtils.execute(populator, dataSource); } catch (Exception e) { log.warn("execute sql error", e); } } else { log.warn("could not find schema or data file {}", location); } } }
Expected Result:
我对这个段代码本地改了一下,可以支持通配符扫描schema文件,改动如下
public void runScript(DataSource dataSource, String location) { if (StringUtils.hasText(location)) { ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setContinueOnError(continueOnError); populator.setSeparator(separator); try { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); populator.addScripts(resolver.getResources(location)); DatabasePopulatorUtils.execute(populator, dataSource); } catch (DataAccessException e) { log.warn("execute sql error", e); } catch (Exception e1) { log.warn("failed to initialize dataSource from schema file {} ", location, e1); } } }
配置文件如下:
url: jdbc:h2:mem:h2/test username: sa password: 123456 driver-class-name: org.h2.Driver schema: classpath*:h2/schema/*.sql
以上配置,都已经通过本地打包测试
@huayanYu 如果觉得可行,我可以提一个PR
Actual Result:
Step 1
Step 2
Step 3
可行
merged
Enviroment
JDK Version(required): 1.8
SpringBoot Version(required): 2.1.2.RELEASE
dynamic-datasource-spring-boot-starter Version(required):3.1.1
druid Version(optional):
Describe
项目在执行单元测试的时候,需要初始化多个schema,配置如下
以上的配置会下面的警告,导致单元测试执行失败:
查看源码发现,获取schema文件使用的ClassPathResource
Expected Result:
我对这个段代码本地改了一下,可以支持通配符扫描schema文件,改动如下
配置文件如下:
以上配置,都已经通过本地打包测试
@huayanYu 如果觉得可行,我可以提一个PR
Actual Result:
Steps to reproduce
Step 1
Step 2
Step 3