content: package com.flame.tx.user.money.config;
  
  import com.alibaba.druid.pool.DruidDataSource;
  import com.lorne.tx.db.LCNDataSourceProxy;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.Primary;
  
  import javax.sql.DataSource;
  import java.sql.SQLException;
  
  /**
   * Created by sungang on 2017/4/6.
   */
  @Configuration
  public class DruidDBConfig {
  
      private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
  
      @Value("${spring.datasource.url}")
      private String dbUrl;
  
      @Value("${spring.datasource.username}")
      private String username;
  
      @Value("${spring.datasource.password}")
      private String password;
  
      @Value("${spring.datasource.driverClassName}")
      private String driverClassName;
  
      @Value("${spring.datasource.initialSize}")
      private int initialSize;
  
      @Value("${spring.datasource.minIdle}")
      private int minIdle;
  
      @Value("${spring.datasource.maxActive}")
      private int maxActive;
  
      @Value("${spring.datasource.maxWait}")
      private int maxWait;
  
      @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
      private int timeBetweenEvictionRunsMillis;
  
      @Value("${spring.datasource.minEvictableIdleTimeMillis}")
      private int minEvictableIdleTimeMillis;
  
      @Value("${spring.datasource.validationQuery}")
      private String validationQuery;
  
      @Value("${spring.datasource.testWhileIdle}")
      private boolean testWhileIdle;
  
      @Value("${spring.datasource.testOnBorrow}")
      private boolean testOnBorrow;
  
      @Value("${spring.datasource.testOnReturn}")
      private boolean testOnReturn;
  
      @Value("${spring.datasource.poolPreparedStatements}")
      private boolean poolPreparedStatements;
  
      @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
      private int maxPoolPreparedStatementPerConnectionSize;
  
      @Value("${spring.datasource.filters}")
      private String filters;
  
      @Value("{spring.datasource.connectionProperties}")
      private String connectionProperties;
  
      @Bean     //声明其为Bean实例
  //    @Primary表示这里定义的DataSource将覆盖其他来源的DataSource
      @Primary  //在同样的DataSource中，首先使用被标注的DataSource
      public DataSource dataSource(){
          DruidDataSource datasource = new DruidDataSource();
  
          datasource.setUrl(this.dbUrl);
          datasource.setUsername(username);
          datasource.setPassword(password);
          datasource.setDriverClassName(driverClassName);
  
          //configuration
          datasource.setInitialSize(initialSize);
          datasource.setMinIdle(minIdle);
          datasource.setMaxActive(maxActive);
          datasource.setMaxWait(maxWait);
          datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
          datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
          datasource.setValidationQuery(validationQuery);
          datasource.setTestWhileIdle(testWhileIdle);
          datasource.setTestOnBorrow(testOnBorrow);
          datasource.setTestOnReturn(testOnReturn);
          datasource.setPoolPreparedStatements(poolPreparedStatements);
          datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
          try {
              datasource.setFilters(filters);
          } catch (SQLException e) {
              logger.error("druid configuration initialization filter", e);
          }
          datasource.setConnectionProperties(connectionProperties);
  
  
          LCNDataSourceProxy dataSourceProxy = new LCNDataSourceProxy();
          dataSourceProxy.setDataSource(datasource);
          dataSourceProxy.setMaxCount(10);
          return dataSourceProxy;
      }
  }
  