package com.jeesuite.mybatis.datasource.builder; import java.util.Properties; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import com.alibaba.druid.pool.DruidDataSource; import com.jeesuite.common.util.ResourceUtils; import com.jeesuite.common.util.SimpleCryptUtils; public class DruidDataSourceBuilder { public static BeanDefinitionBuilder builder(Properties props){ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DruidDataSource.class); String cryptKey = props.getProperty("config.cryptKey"); if(props.containsKey("name"))beanDefinitionBuilder.addPropertyValue("name", props.getProperty("name")); beanDefinitionBuilder.addPropertyValue("driverClassName", props.getProperty("driverClassName")); beanDefinitionBuilder.addPropertyValue("url", props.getProperty("url")); beanDefinitionBuilder.addPropertyValue("username", props.getProperty("username")); String password = props.getProperty("password"); if(StringUtils.isNotBlank(cryptKey) && !ResourceUtils.NULL_VALUE_PLACEHOLDER.equals(cryptKey)){ try { password = SimpleCryptUtils.decrypt(cryptKey, password); } catch (Exception e) { System.err.println(">> find config[db.config.cryptKey],but decrypt error ,use orign password"); } } beanDefinitionBuilder.addPropertyValue("password", password); beanDefinitionBuilder.addPropertyValue("testWhileIdle", Boolean.parseBoolean(props.getProperty("testWhileIdle","true"))); beanDefinitionBuilder.addPropertyValue("validationQuery", props.getProperty("validationQuery","SELECT 'x'")); beanDefinitionBuilder.addPropertyValue("maxActive", Integer.parseInt(props.getProperty("maxActive","10"))); beanDefinitionBuilder.addPropertyValue("initialSize", Integer.parseInt(props.getProperty("initialSize","1"))); beanDefinitionBuilder.addPropertyValue("minIdle", Integer.parseInt(props.getProperty("minIdle","1"))); beanDefinitionBuilder.addPropertyValue("maxWait", Long.parseLong(props.getProperty("maxWait","10000"))); beanDefinitionBuilder.addPropertyValue("minEvictableIdleTimeMillis", Long.parseLong(props.getProperty("minEvictableIdleTimeMillis","60000"))); beanDefinitionBuilder.addPropertyValue("timeBetweenEvictionRunsMillis", Long.parseLong(props.getProperty("timeBetweenEvictionRunsMillis","60000"))); beanDefinitionBuilder.addPropertyValue("testOnBorrow", Boolean.parseBoolean(props.getProperty("testOnBorrow","true"))); beanDefinitionBuilder.addPropertyValue("testOnReturn", Boolean.parseBoolean(props.getProperty("testOnReturn","false"))); return beanDefinitionBuilder; } }