java - druid-spring-boot-starter中的一个疑问
问题描述
先贴代码
@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应该还没注入属性吧,这样判断不是也没意义?
问题解答
回答1:可能是为以后 properties 里面添加其他属性留余地吧。
相关文章:
1. node.js通过module.exprots返回的是promise对象而非data?2. 使用 CSS3 的 Media Query 浏览器会加载其他不同分辨率的 css 文件么3. “Webdrivers”可执行文件可能具有错误的权限请参阅https://sites.google.com/a/chromium.org/chromedriver/home4. php-_server-php_self - nginx $_SERVER[’PHP_SELF’] 得到重复路径是什么原因?5. 前端 - 类到底该如何去命名 .newsList 这种的命名难道真的不是过度语义化吗?~6. html - 开发android的调取我web页面 他之前用的是收费的浏览器包 显示是全的换了免费的浏览器包后 显示就不全 是什么原因啊7. gulp-ruby-sass编译出来的文件有错8. 关于docker下的nginx压力测试9. javascript - 给js写的盒子添加css样式,css样式没起作用。10. 数据挖掘 - 如何用python实现《多社交网络的影响力最大化问题分析》中的算法?

网公网安备