为了账号安全,请及时绑定邮箱和手机立即绑定

druid-spring-boot-starter中的一个疑问

druid-spring-boot-starter中的一个疑问

偶然的你 2019-03-01 10:46:24
先贴代码 @Configuration @ConditionalOnClass(com.alibaba.druid.pool.DruidDataSource.class) @EnableConfigurationProperties(DruidStatProperties.class) @Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class, DruidWebStatFilterConfiguration.class}) public class DruidDataSourceAutoConfigure { @Bean @ConfigurationProperties("spring.datasource.druid") @ConditionalOnMissingBean public DataSource dataSource(Environment env) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); //if not found prefix 'spring.datasource.druid' settings,'spring.datasource' prefix settings will be used. if (dataSource.getUsername() == null) { dataSource.setUsername(env.getProperty("spring.datasource.username")); } if (dataSource.getPassword() == null) { dataSource.setPassword(env.getProperty("spring.datasource.password")); } if (dataSource.getUrl() == null) { dataSource.setUrl(env.getProperty("spring.datasource.url")); } if (dataSource.getDriverClassName() == null) { dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); } // set filters default value on StatViewServlet enabled. if (! "false".equals(env.getProperty("spring.datasource.druid.StatViewServlet.enabled"))) { try { dataSource.setFilters("stat"); } catch (SQLException e) { e.printStackTrace(); } } return dataSource; } } public class DruidDataSourceBuilder { private Map<String, String> properties = new HashMap<String, String>(); public static DruidDataSourceBuilder create() { return new DruidDataSourceBuilder(); } public DruidDataSource build() { DruidDataSource dataSource = new DruidDataSource(); maybeGetDriverClassName(); bind(dataSource); return dataSource; } //use spring boot relaxed binding by reflection config druid . detail see Spring Boot Reference Relaxed binding section. private void bind(DruidDataSource result) { MutablePropertyValues properties = new MutablePropertyValues(this.properties); new RelaxedDataBinder(result) .withAlias("url", "jdbcUrl") .withAlias("username", "user") .bind(properties); } private void maybeGetDriverClassName() { if (!this.properties.containsKey("driverClassName") && this.properties.containsKey("url")) { String url = this.properties.get("url"); String driverClass = DatabaseDriver.fromJdbcUrl(url).getDriverClassName(); this.properties.put("driverClassName", driverClass); } } } 不理解的地方在DruidDataSourceBuilder的maybeGetDriverClassName方法,显然DruidDataSourceAutoConfigure中的方法dataSource在使用DruidDataSourceBuilder的时候,DruidDataSourceBuilder中的properties是没有属性的,这样的话maybeGetDriverClassName方法不是没有意义吗?还有一点是DruidDataSourceAutoConfigure的dataSource方法中的if判断,在方法中dataSource应该还没注入属性吧,这样判断不是也没意义?
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

可能是为以后 properties 里面添加其他属性留余地吧。

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1045 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信