如何在Spring中使用驱动程序类配置多个DataSource?

时间:2019-06-18 14:45:34

标签: java spring spring-boot mariadb

为什么在以下配置中缺少驱动程序类?

spring.datasource.testdb.url=jdbc:mariadb://localhost/mytable
spring.datasource.testdb.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.testdb.username=test
spring.datasource.testdb.password=test


@Configuration
public class DataSourceConfig {
    @ConfigurationProperties(prefix = "spring.datasource.testdb")
    @Primary
    public DataSource dataSourceTest() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public JdbcTemplate jdbcTemplateTest() {
        return new JdbcTemplate(dataSourceTest());
    }

    //secondary db config to follow
}

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
    </dependency>
</dependencies>

结果:

  

无法配置数据源:未指定'url'属性,并且   无法配置任何嵌入式数据源。原因:未能   确定合适的驱动程序类别

这很奇怪,因为我什至可以进入org.mariadb.jdbc.Driver类,所以它显然在类路径上。

2 个答案:

答案 0 :(得分:2)

看起来您只需要将@Bean批注添加到dataSourceTest()。

@Bean
@ConfigurationProperties(prefix = "spring.datasource.testdb")
@Primary

此外,对于Hikari连接池(这是默认连接池),url属性是jdbc-url,而不是url。因此,更改

spring.datasource.testdb.url=jdbc:mariadb://localhost/mytable

spring.datasource.testdb.jdbc-url=jdbc:mariadb://localhost/mytable

有关更多信息和其他可能的解决方案,请参见:After Spring Boot 2.0 migration: jdbcUrl is required with driverClassName

希望这会有所帮助。

答案 1 :(得分:0)

您确定属性文件已正确加载吗?该消息清楚地表明未指定url属性,因此显然未读取spring.datasource.testdb.url=jdbc:mariadb://localhost/mytable行-驱动程序类路径与它无关。

默认情况下,这些行应位于application.properties文件中,这是您所在的位置吗?