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();
我想这个MultiValuedMap.addAll
是在springframework试图构建构建EmbeddedDatabase
的幕后使用的。不知道为什么会收到此错误,有什么建议吗?
答案 0 :(得分:0)
好的,在我的情况下,我正在使用<springversion>4.2.5.RELEASE</springversion>
,并且在maven存储库中清楚地表明如果我使用spring-boot-jdbc-2.1.5
,则需要使用至少是springframework版本5.1.7.RELEASE mvn_link_here。我可能很想念它,我很糟糕。
如果某人仅使用spring,则应使用SimpleDriverDataSource
的一部分org.springframework.jdbc.datasource
,并使用它可以指定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();
}