Отсутствующие методы, использующие org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder - PullRequest
1 голос
/ 18 июня 2019
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. Не уверен, почему я получаю эту ошибку, какие-либо предложения?

1 Ответ

0 голосов
/ 18 июня 2019

Хорошо, поэтому в моем случае я использую <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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...