springboot 使用druid数据源 No supported DataSource type found

解决思路:

1、问题可能在上面显示的配置文件application.yml的spring.datasource.type里。尝试在其他类里import这个类,结果是
The import com.alibaba.druid.pool.DruidDataSource cannot be resolved

通过检查lib,是有druid和druid-spring-boot-starter的jar包的。既然在maven添加了依赖,成功导入了jar包,却出现这种问题。大部分原因是jar包重复、或者有依赖关系的jar包之间冲突了。

查看pom.xml,尝试把druid的dependency去掉。

2、问题依然存在。可能是配置类代码有问题,没有把配置文件信息成功注入到配置类。以下是有问题的配置类DruidDataSourceConfig

import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DruidDataSourceConfig {
    
    private static final Logger logger = LoggerFactory.getLogger(DruidDataSourceConfig.class);

    @Bean(name = "frameworkDruidDS")
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}

查看DataSourceBuilder的实例变量:

由于配置类写了下面这句话,所以它会把配置文件datasource下的字段值赋给DataSourceBuilder对应名称的实例变量中,比如datasource下的type会寻找DataSourceBuilder的type实例变量并赋值,没找到就不会赋值。

@ConfigurationProperties(prefix="spring.datasource")

那么这样配置文件显然是不对的,于是按下面这样这么改了:

同时下面这条语句也改一下

@ConfigurationProperties(prefix="spring.datasource.druid")

3、问题还是没解决,猜测应该是type没有正确配置。在网上查找资料,找到答案,使用type()方法进行配置

    @Bean(name = "frameworkDruidDS")
    @ConfigurationProperties(prefix="spring.datasource.druid")
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
    }

配置如下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容