https://blog.csdn.net/weixin_44299027/article/details/119387777
二、问题原因 由于使用 Spring Boot 时,默认情况下,配置 DataSource 非常容易。Spring Boot 会自动为我们配置好一个 DataSource。
如果在 application.yml 中指定了 spring.datasource 的相关配置,Spring Boot 就会使用该配置创建一个 DataSource。如果在 application.yml 中没有指定任何 spring.datasource 的相关配置,Spring Boot 会在 classpath 中搜索 H2、hsqldb 等内存数据库的 jar 包,如果找到了,就会自动配置一个内存数据库的 DataSource,所以,我们只要引入 jar 包即可。
而根据报错信息翻译是 “未能确定合适的驱动程序类”,原因是应用没有使用到合适的 DataSource,Spring Boot 会自动的为我们配置一个 DataSource,而 ruidDataSourceAutoConfigure 也会注入一个 DataSourceWrapper,其会在原生的 spring.datasource 下找 url, username, password 等,就会导致有两个 DataSource,最后程序就会很郁闷,它也不知道该使用哪个了,所以会报错。
动态数据源 URL 等配置是在 dynamic 下,因此需要排除,否则会报错。 ———————————————— 版权声明:本文为 CSDN 博主「No8g 攻城狮」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44299027/article/details/119387777 三、解决方案 根据原因分析,解决方案有两种,即排除重复引用的 DataSource,一种是上述配置文件排除,还有一种可以在项目启动类排除:
方式 1:配置文件排除 server: port: 8080 spring: datasource: dynamic: primary: db1 # 配置默认数据库 datasource: db1: # 数据源 1 配置 url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver db2: # 数据源 2 配置 url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver durid: initial-size: 1 max-active: 20 min-idle: 1 max-wait: 60000 autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除 druid 配置 autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除 druid 配置 方式 2:项目启动类排除 @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 完结! ———————————————— 版权声明:本文为 CSDN 博主「No8g 攻城狮」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44299027/article/details/119387777