无法使用数据源中的 getConnection()

Unable to use getConnection() from datasource

这是我的数据源配置:

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

在@Configuration中配置class。

这是我的 application.properties 的样子:

database1.datasource.jdbc-url=jdbc:mysql://localhost:3306/dbpms
database1.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
database1.datasource.username=root
database1.datasource.password=
spring.jpa.hibernate.ddl-auto=update
database1.datasource.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
database1.datasource.initialize=true;
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

此配置按预期工作。

我在尝试从 primaryDataSource() 获取连接时出现问题:

primaryDataSource().getConnection;

抛出以下异常:

Exception in thread "Thread-5" java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:1029)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:109)

既然我的数据源工作正常,为什么我不能调用这个方法?

如果你想访问任何 spring bean,你只需要将它自动装配到另一个 bean,而不是调用配置中的方法 类:

@Autowired
DataSource datasource;

此外,根据 JRichardsz 的回答,我认为 application.properties 中 URL 的正确变量名称是 url,而不是 jdbc-url。

在本文档中对此进行了引用

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.data.spring.datasource.url

从 primaryDataSource() 方法声明中删除静态修饰符。它应该是这样的:

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