Мне нужно установить некоторые определенные свойства соединения Oracle JDBC, чтобы ускорить пакетные INSERT
s (defaultBatchValue
) и массовые SELECT
s (defaultRowPrefetch
). Я получил предложения, как достичь это с DBCP (спасибо M. Deinum), но я хотел бы:
- сохранить пул соединений Tomcat jdbc по умолчанию
- сохраните application.yml для конфигурации
Я думал о запросе функции для поддержки spring.datasource.custom_connection_properties
или подобного в будущем, и из-за этого пытался сделать вид, что это уже возможно. Я сделал это, передав соответствующую информацию при создании DataSource и манипулируя созданием DataSource следующим образом:
@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
был активирован.
DataSourceBuilder
, и они содержат лишь небольшое количество полезных свойств для внутреннего использования. - person M. Deinum   schedule 18.01.2016