@Test
 public void testDataSourceUrlHasEmbeddedDefault() throws Exception {
   this.context.register(
       DataSourceAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class);
   this.context.refresh();
   org.apache.tomcat.jdbc.pool.DataSource dataSource =
       this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class);
   assertNotNull(dataSource.getUrl());
   assertNotNull(dataSource.getDriverClassName());
 }
 @Test
 public void testEmbeddedTypeDefaultsUsername() throws Exception {
   EnvironmentTestUtils.addEnvironment(
       this.context,
       "spring.datasource.driverClassName:org.hsqldb.jdbcDriver",
       "spring.datasource.url:jdbc:hsqldb:mem:testdb");
   this.context.register(
       DataSourceAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class);
   this.context.refresh();
   DataSource bean = this.context.getBean(DataSource.class);
   assertNotNull(bean);
   org.apache.tomcat.jdbc.pool.DataSource pool = (org.apache.tomcat.jdbc.pool.DataSource) bean;
   assertEquals("org.hsqldb.jdbcDriver", pool.getDriverClassName());
   assertEquals("sa", pool.getUsername());
 }
 @Test
 public void testExplicitDriverClassClearsUserName() throws Exception {
   EnvironmentTestUtils.addEnvironment(
       this.context,
       "spring.datasource.driverClassName:org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfigurationTests$DatabaseDriver",
       "spring.datasource.url:jdbc:foo://localhost");
   this.context.register(
       DataSourceAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class);
   this.context.refresh();
   DataSource bean = this.context.getBean(DataSource.class);
   assertNotNull(bean);
   org.apache.tomcat.jdbc.pool.DataSource pool = (org.apache.tomcat.jdbc.pool.DataSource) bean;
   assertEquals(
       "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfigurationTests$DatabaseDriver",
       pool.getDriverClassName());
   assertNull(pool.getUsername());
 }
  private static void pullTomcatJdbcDataSourceProperties(String name, DataSource dataSource) {
    // si tomcat-jdbc, alors on récupère des infos
    final org.apache.tomcat.jdbc.pool.DataSource jdbcDataSource =
        (org.apache.tomcat.jdbc.pool.DataSource) dataSource;
    final BasicDataSourcesProperties properties = TOMCAT_JDBC_DATASOURCES_PROPERTIES;
    // basicDataSource.getNumActive() est en théorie égale à USED_CONNECTION_COUNT à un instant t,
    // numIdle + numActive est le nombre de connexions ouvertes dans la bdd pour ce serveur à un
    // instant t

    // les propriétés généralement importantes en premier (se méfier aussi de testOnBorrow)
    properties.put(name, MAX_ACTIVE_PROPERTY_NAME, jdbcDataSource.getMaxActive());

    properties.put(name, "defaultCatalog", jdbcDataSource.getDefaultCatalog());
    properties.put(name, "defaultAutoCommit", jdbcDataSource.getDefaultAutoCommit());
    properties.put(name, "defaultReadOnly", jdbcDataSource.getDefaultReadOnly());
    properties.put(
        name, "defaultTransactionIsolation", jdbcDataSource.getDefaultTransactionIsolation());
    properties.put(name, "driverClassName", jdbcDataSource.getDriverClassName());
    properties.put(name, "connectionProperties", jdbcDataSource.getConnectionProperties());
    properties.put(name, "initSQL", jdbcDataSource.getInitSQL());
    properties.put(name, "initialSize", jdbcDataSource.getInitialSize());
    properties.put(name, "maxIdle", jdbcDataSource.getMaxIdle());
    properties.put(name, "maxWait", jdbcDataSource.getMaxWait());
    properties.put(name, "maxAge", jdbcDataSource.getMaxAge());
    properties.put(name, "faireQueue", jdbcDataSource.isFairQueue());
    properties.put(name, "jmxEnabled", jdbcDataSource.isJmxEnabled());
    properties.put(
        name, "minEvictableIdleTimeMillis", jdbcDataSource.getMinEvictableIdleTimeMillis());
    properties.put(name, "minIdle", jdbcDataSource.getMinIdle());
    properties.put(name, "numTestsPerEvictionRun", jdbcDataSource.getNumTestsPerEvictionRun());
    properties.put(name, "testOnBorrow", jdbcDataSource.isTestOnBorrow());
    properties.put(name, "testOnConnect", jdbcDataSource.isTestOnConnect());
    properties.put(name, "testOnReturn", jdbcDataSource.isTestOnReturn());
    properties.put(name, "testWhileIdle", jdbcDataSource.isTestWhileIdle());
    properties.put(
        name, "timeBetweenEvictionRunsMillis", jdbcDataSource.getTimeBetweenEvictionRunsMillis());
    properties.put(name, "validationInterval", jdbcDataSource.getValidationInterval());
    properties.put(name, "validationQuery", jdbcDataSource.getValidationQuery());
    properties.put(name, "validatorClassName", jdbcDataSource.getValidatorClassName());
  }