Как настроить пользовательские свойства соединения в DataSource в Spring Boot 1.3.x с пулом соединений Tomcat по умолчанию

Мне нужно установить некоторые конкретные свойства соединения JDBC Oracle, чтобы ускорить пакетINSERTс (defaultBatchValue) и массаSELECTс (defaultRowPrefetch). я получилпредложения как этого добиться с помощью DBCP (спасибо М. Дейнму), но я бы хотел:

сохранить пул соединений Tomcat по умолчанию для jdbcсохранить application.yml для настройки

Я думал о функции поддержки запросаspring.datasource.custom_connection_properties или подобное в будущем, и из-за этого пытались сделать вид, что это уже возможно. Я сделал это, передав соответствующую информацию при создании источника данных, и управлял созданием источника данных следующим образом:

@Bean
public DataSource dataSource() {
    DataSource ds = null;

    try {
        Field props = DataSourceBuilder.class.getDeclaredField("properties");
        props.setAccessible(true);
        DataSourceBuilder builder = DataSourceBuilder.create();
        Map<String, String> properties = (Map<String, String>) props.get(builder);

        properties.put("defaultRowPrefetch", "1000");
        properties.put("defaultBatchValue", "1000");

        ds = builder.url( "jdbc:oracle:thin:@xyz:1521:abc" ).username( "ihave" ).password( "wonttell" ).build();

        properties = (Map<String, String>) props.get(builder);

        log.debug("properties after: {}", properties);
    } ... leaving out the catches ...
    }
    log.debug("We are using this datasource: {}", ds);
    return ds;
}

В журналах я вижу, что я создаю правильный источник данных:

2016-01-18 14:40:32.924 DEBUG 31204 --- [           main] d.a.e.a.c.config.DatabaseConfiguration   : We are using this datasource: org.apache.tomcat.jdbc.pool.DataSource@19f040ba{ConnectionPool[defaultAutoCommit=null; ...

2016-01-18 14:40:32.919 DEBUG 31204 --- [           main] d.a.e.a.c.config.DatabaseConfiguration   : properties after: {password=wonttell, driverClassName=oracle.jdbc.OracleDriver, defaultRowPrefetch=1000, defaultBatchValue=1000, url=jdbc:oracle:thin:@xyz:1521:abc, username=ihave}

Привод показывает мне, что мой код заменил источник данных:

Но настройки не активированы, что я вижу при профилировании приложения.defaultRowPrefetch все еще в10 что вызывает мойSELECTбудет намного медленнее, чем если бы1000 был активирован.

Ответы на вопрос(3)

Ваш ответ на вопрос