Реализация источника загрузки Spring - PullRequest
0 голосов
/ 03 января 2019

Я реализую библиотеку, используя Spring boot framework.Библиотека предлагает пользовательские стартеры для Kafka, Datasource и т. Д. Для потребителей.Им следует использовать библиотеку для разработки микросервисов.

У меня возникли проблемы с реализацией автоконфигурации источника данных.

Требования
В библиотеке должна быть реализована автоконфигурация источника данных, которая должна предоставлять разработчикам возможность использовать до 2 различных источников данных, настроенных в application.yml.Это то, что я сделал до сих пор.

library/
      |__autoconfigure/
                      |__datasource/
                                   |__DataSourceAutoConfiguration.java
                                   |__PrimaryDataSourceConfiguration.java
                                   |__SecondaryDataSourceConfiguration.java
      |__datasource/
                   |__CustomRepository.java
      |
      |__datasource-spring-boot-starter/

Код

DataSourceAutoConfiguration.java

@Configuration
@ConditionalOnBean({DataSource.class})
@ConditionalOnClass({JpaRepository.class})
public class DataSourceAutoConfiguration {

}  

PrimaryDataSourceConfiguration.java

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "entityManagerFactory",
    )
public class PrimaryDataSourceConfiguration {

    @Primary
    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "service.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean 
        entityManagerFactory(
        EntityManagerFactoryBuilder builder,
        @Qualifier("dataSource") DataSource dataSource
        ) {
        return builder
                .dataSource(dataSource)
            .build();
    }

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(
        @Qualifier("entityManagerFactory") EntityManagerFactory 
        entityManagerFactory
        ) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

application.yml

service: 
  datasource: 
    hikari:
      jdbcUrl: jdbc:mysql://localhost:3306/test 
      username: root
      password: root
      driver-class-name: com.mysql.jdbc.Driver

При запуске службы появляется следующая ошибка:

Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:1063) ~[HikariCP-2.7.9.jar:?]

Что яздесь не хватает?

1 Ответ

0 голосов
/ 03 января 2019

Вы должны использовать свойство jdbcUrl (особенно для Spring Boot и MySQL):

service:
  datasource: 
    hikari:
      jdbcUrl: jdbc:mysql://localhost:3306/test 

Примечание. Пользователям автоконфигурации Spring Boot необходимо использовать конфигурацию на основе jdbcUrl.

Известно, что MySQL DataSource не работает из-за поддержки тайм-аута сети. Вместо этого используйте конфигурацию jdbcUrl.

...