apache / shardingsphere

Distributed SQL transaction & query engine for data sharding, scaling, encryption, and more - on any database.
Apache License 2.0
19.8k stars 6.7k forks source link

sharding-jdbc-spring-boot-starter使用druid,DataSourceUtil初始化数据库连接参数BUG #423

Closed ilevon closed 6 years ago

ilevon commented 6 years ago

你好:

   使用springboot+mybatis+sjdbc时发现了一个问题,供大家参考,如该问题已知,请忽略

版本信息 sharding-jdbc.version:2.0.0.M1 mybatis-spring-boot-starter:1.3.1 druid: 1.0.13 部分源码: -->io.shardingjdbc.spring.boot.SpringBootConfiguration#setDataSourceMap -->DataSource dataSource = DataSourceUtil.getDataSource(dataSourceProps.get("type").toString(), dataSourceProps);

--> io.shardingjdbc.core.util.DataSourceUtil#callSetterMethod --> Method method = dataSource.getClass().getDeclaredMethod(methodName, new Class[]{each});

原因排查: druid1.0.13版本 com.alibaba.druid.pool.DruidDataSource 自身不包含url、driveClass、password、username等属性,而是在其继承的抽象类DruidAbstractDataSource中。 而shardingjdbc中DataSourceUtil使用的是getDeclaredMethod方式,导致连接参数set不进去,datasource无法正常完成初始化,导致后续代码空指针。

最后解决方式: 改用dbcp连接池可正常使用

terrymanu commented 6 years ago

duplicate with #404