Spring Boot数据源实现

时间:2019-01-03 12:10:03

标签: spring-boot datasource hikaricp

我正在使用Spring Boot框架实现一个库。该库为消费者提供了针对Kafka,Datasource等的自定义启动器。他们应该使用该库来开发微服务。

我在实现数据源自动配置时遇到问题。

要求
库必须实现数据源自动配置,该配置应使开发人员可以使用在application.yml中配置的最多2个不同的数据源。到目前为止,这是我所做的。

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 :(得分:0)

您应该使用jdbcUrl属性(尤其是对于Spring Boot和MySQL):

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

注意:Spring Boot自动配置用户,您需要使用基于jdbcUrl的配置。

     

众所周知,就网络超时支持而言,MySQL数据源已损坏。改为使用jdbcUrl配置。