package org.springframework.cloud.service.relational; import static org.springframework.cloud.service.Util.setCorrespondingProperties; import javax.sql.DataSource; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.springframework.cloud.service.MapServiceConnectionConfigurer; import org.springframework.cloud.service.MapServiceConnectorConfig; import org.springframework.cloud.service.PooledServiceConnectorConfigurer; /** * * @author Ramnivas Laddad * */ public class DataSourceConfigurer extends PooledServiceConnectorConfigurer<DataSource, DataSourceConfig> { private MapServiceConnectionConfigurer<DataSource, MapServiceConnectorConfig> mapServiceConnectionConfigurer = new MapServiceConnectionConfigurer<DataSource, MapServiceConnectorConfig>(); @Override public DataSource configure(DataSource dataSource, DataSourceConfig config) { if (config != null) { configureConnection(dataSource, config); configureConnectionProperties(dataSource, config); return super.configure(dataSource, config); } return dataSource; } private void configureConnection(DataSource dataSource, DataSourceConfig config) { if (config.getConnectionConfiguration() != null) { BeanWrapper target = new BeanWrapperImpl(dataSource); BeanWrapper connectionSource = new BeanWrapperImpl(config.getConnectionConfiguration()); setCorrespondingProperties(target, connectionSource); } } private void configureConnectionProperties(DataSource dataSource, DataSourceConfig config) { if (config.getConnectionProperties() != null) { mapServiceConnectionConfigurer.configure(dataSource, config.getConnectionProperties()); } } }