java - druid-spring-boot-starter中的一個(gè)疑問(wèn)
問(wèn)題描述
先貼代碼
@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的時(shí)候,DruidDataSourceBuilder中的properties是沒(méi)有屬性的,這樣的話maybeGetDriverClassName方法不是沒(méi)有意義嗎?還有一點(diǎn)是DruidDataSourceAutoConfigure的dataSource方法中的if判斷,在方法中dataSource應(yīng)該還沒(méi)注入屬性吧,這樣判斷不是也沒(méi)意義?
問(wèn)題解答
回答1:可能是為以后 properties 里面添加其他屬性留余地吧。
相關(guān)文章:
1. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””2. boot2docker無(wú)法啟動(dòng)3. docker-compose中volumes的問(wèn)題4. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.5. nignx - docker內(nèi)nginx 80端口被占用6. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎7. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?8. java - SSH框架中寫(xiě)分頁(yè)時(shí)service層中不能注入分頁(yè)類(lèi)9. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?10. java - Spring事務(wù)回滾問(wèn)題

網(wǎng)公網(wǎng)安備