繁体   English   中英

使用org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder的方法丢失

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM