[英]ClassNotFoundException: org.springframework.jdbc.datasource.DriverManagerDataSource
[英]Missing methods using org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder
Caused by: java.lang.NoSuchMethodError:
org.springframework.util.MultiValueMap.addAll(Ljava/lang/Object;Ljava/util/List;)V
构建数据源时遇到此错误:
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.setName("table_name")
.setScriptEncoding("UTF-8")
.addScript("classpath:sql_schema_path")
.setDataSourceFactory(embeddedDataSourceFactory) // @bean to pass Factory values
.build();
我猜想当springframework试图构建build EmbeddedDatabase
时,在后台使用了MultiValuedMap.addAll
。 不知道为什么我会收到此错误,有什么建议吗?
好的,所以在我的情况下,我正在使用<springversion>4.2.5.RELEASE</springversion>
并且在maven存储库中清楚地表明如果我使用spring-boot-jdbc-2.1.5
,则需要使用至少5.1.7版本的springframework .RELEASE mvn_link_here 。 我可能想念它,我很糟糕。
如果某人仅使用spring,则应该使用org.springframework.jdbc.datasource
一部分的SimpleDriverDataSource
,并可以使用它指定url,驱动程序,用户名和密码。
那里没有很多示例,所以我实现它的方法和它的工作原理是这样的:
@Configuration
@PropertySource("classpath:properties.file")
public class DatabaseServiceImplTestConfig {
@Autowired
private Environment env;
@Bean
public DataSourceFactory embeddedDataSourceFactory() {
return new DataSourceFactory() {
@Override
public ConnectionProperties getConnectionProperties() {
return new ConnectionProperties() {
@Override
public void setUsername(String username) {}
@Override
public void setPassword(String password) {}
@Override
public void setUrl(String url) {}
@Override
public void setDriverClass(Class<? extends Driver> driverClass) {}
};
}
@Override
public DataSource getDataSource() {
SimpleDriverDataSource sds = new SimpleDriverDataSource();
sds.setDriverClass(com.mysql.jdbc.Driver.class); // <- try to return Driver object too (using setDriver)
sds.setUrl(env.getProperty("jdbc.connection.url"));
sds.setUsername(env.getProperty("jdbc.connection.username"));
sds.setPassword(env.getProperty("jdbc.connection.password"));
return sds;
}
};
}
@Bean
public DataSource embeddedDataSource(DataSourceFactory embeddedDataSourceFactory) {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.setName("table_name_here")
.setScriptEncoding("UTF-8")
.addScript("classpath:path/to/your/shema.sql")
.setDataSourceFactory(embeddedDataSourceFactory) // <- call the bean here
.build();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.