大家好,我正在尝试使用 Spring Boot v3.0.4 连接我的 Web 应用程序中的多个数据源。但是,当我运行我的网络应用程序时,发生了以下错误。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
Failed to instantiate [org.flywaydb.core.Flyway]:
Factory method 'flyway' threw exception with message: Error creating bean with name 'routingDataSource' defined in class path resource [CouponDbConfig.class]:
Failed to instantiate [javax.sql.DataSource]:
Factory method 'routingDataSource' threw exception with message: dataSource or dataSourceClassName or jdbcUrl is required.
这是我的源代码。
@Bean
@ConfigurationProperties(prefix = "spring.datasource.coupon.writer")
fun couponDatasourceWriter(): DataSource = DataSourceBuilder.create().build()
// ...
@FlywayDataSource
@Bean
fun routingDataSource(): DataSource {
val writerDataSource: DataSource = couponDatasourceWriter()
//...
}
这是我的 application.yml 文件。
spring:
datasource:
coupon:
writer:
driver-class-name: org.postgresql.Driver
jdbc-url: jdbc:postgresql://localhost:xxx/test
username: xxx
password: xxx
起初,我怀疑@ConfigurationProperties
注释无法注入我的应用程序属性(myapplication.yml
)。因此,我使用以下代码进行了测试,应用程序可以成功运行。
@Bean
fun couponDatasourceWriter(): DataSource = DataSourceBuilder.create()
.driverClassName("org.postgresql.Driver")
.url("jdbc:postgresql://localhost:xxx/test")
.username("xxx")
.password("xxx")
.build()
// ...
@FlywayDataSource
@Bean
fun routingDataSource(): DataSource {
val writerDataSource: DataSource = couponDatasourceWriter()
//...
}
问题是,在 Spring Boot v2.6.6 中,上述发生错误的代码已成功运行,没有出现任何问题。我认为 Spring Boot v3.0.x 版本本身可能存在问题。我发现有关@ConfigurationProperties
Spring Boot v3.0.x 注释的一些问题不完全相同,但相似。大家可以检查一下这个问题吗?