关于Druid的配置问题

今天看源码发现DruidDataSource中的配置代码如下:

然后我在DruidConfig中使用的@ConfigurationProperties(prefix = "spring.datasource")注解,为什么yml配置文件中的druid配置是spring.datasource.xxx才会生效,为什么不是spring.datasource.druid.xxx

@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DruidDataSource druidDataSource(){
        return new DruidDataSource();
    }

    @Bean
    public ServletRegistrationBean<StatViewServlet> registrationBean(){
        ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put("loginUsername","root");
        stringStringHashMap.put("loginPassword","123456");
        servletRegistrationBean.setInitParameters(stringStringHashMap);
        return servletRegistrationBean;
    }
}

 

兄弟,@ConfigurationProperties(prefix = "spring.datasource") 意味着 在 yml配置文件中寻找 spring.datasource 下面的 driver-class url user pass,如果你在加上一层的话位置错误,无法找到你的数据库连接的四个基本配置,就好比你的第一张图

看的是 druid.password ...

点进去看ConfigurationProperties源码,里面读取时已经加了前缀

数据源的配置分成二部份,

一:通用配置(如:type driver-class url user pass)

二:特定配置,是根据通用配置的type来确定并配置参数

默认使用spring.datasource获取通用配置,使用Druid连接池,则会从spring.datasource下的druid获取特定配置,从你的配置中druid的特定配置都应该没有获取到(没有druid节点),从而使用了默认配置值创建了连接池