【问题标题】:How to configure mutiple DataSource with driver-class in Spring?如何在 Spring 中使用驱动程序类配置多个 DataSource?
【发布时间】:2019-11-01 06:04:27
【问题描述】:

为什么下面的配置中缺少驱动类?

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 类,所以它显然在类路径上。

【问题讨论】:

    标签: java spring spring-boot mariadb


    【解决方案1】:

    看来您只需将@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

    希望这会有所帮助。

    【讨论】:

    • 我试过了,应用程序启动成功。但是在访问JdbcTemplate 时,我得到:线程“main”java.lang.IllegalArgumentException 中的异常:driverClassName 需要jdbcUrl。
    • 我修改了答案,也将 url 属性更改为 jdbc-url。
    • 确实,尤其是以下答案似乎提供了解决方案:stackoverflow.com/a/49141541/1194415
    【解决方案2】:

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

    默认情况下,这些行应该在 application.properties 文件中,你有它们吗?

    【讨论】:

    • 是的,它位于application.properties。如果我删除DataSourceConfig 并将配置更改为仅一个主ds,例如spring.datasource.url=jdbc:mariadb://localhost/mytable,一切都会按预期工作。所以总的来说设置应该没问题。只是多个 ds 配置不...
    猜你喜欢
    • 2014-01-14
    • 2011-09-21
    • 2015-05-25
    • 1970-01-01
    • 2014-06-10
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多