content: package com.jeespring.common.druid;
  
  import java.sql.SQLException;
  
  import javax.sql.DataSource;
  
  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 com.alibaba.druid.pool.DruidDataSource;
  
  /**
   * 
   * 描述：如果不使用代码手动初始化DataSource的话，监控界面的SQL监控会没有数据("是spring boot的bug???")
   * @author chhliu
   * 创建时间：2017年2月9日 下午10:33:08
   * @version 1.2.0
   */
  @Configuration
  public class DruidConfiguration {
      @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;
      @Value("${spring.datasource.useGlobalDataSourceStat}")
      private boolean useGlobalDataSourceStat;
  
      @Bean     //声明其为Bean实例
      @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);
          datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
          try {
              datasource.setFilters(filters);
          } catch (SQLException e) {
              System.err.println("druid configuration initialization filter: "+ e);
          }
          datasource.setConnectionProperties(connectionProperties);
          return datasource;
      }
  }