我正在使用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:?]
我在这里想念什么?
答案 0 :(得分:0)
您应该使用jdbcUrl属性(尤其是对于Spring Boot和MySQL):
service:
datasource:
hikari:
jdbcUrl: jdbc:mysql://localhost:3306/test
注意:Spring Boot自动配置用户,您需要使用基于jdbcUrl的配置。
众所周知,就网络超时支持而言,MySQL数据源已损坏。改为使用jdbcUrl配置。