今天看源码发现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节点),从而使用了默认配置值创建了连接池