ho bisogno di impostare alcune proprietà specifiche di connessione JDBC Oracle, al fine di accelerare il lotto INSERT
s (defaultBatchValue
) e massa SELECT
s (defaultRowPrefetch
) . ho avuto suggestions come raggiungere questo obiettivo con DBCP (Grazie a M. Deinum), ma mi piacerebbe:come impostare le proprietà di connessione personalizzata su DataSource in primavera Boot 1.3.x con piscina di default il collegamento Tomcat
- mantenere il Tomcat pool di connessioni JDBC predefinita
- mantenere application.yml per la configurazione
Stavo pensando a una richiesta di funzionalità per supportare spring.datasource.custom_connection_properties
o simili in futuro e per questo ho cercato di fingere che fosse già possibile. Ho fatto questo passando le informazioni utili durante la creazione del DataSource e manipolato la creazione del DataSource in questo modo:
@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;
}
Nei registri posso vedere che sto creando la corretta DataSource:
2016-01-18 14:40:32.924 DEBUG 31204 --- [ main] d.a.e.a.c.config.DatabaseConfiguration : We are using this datasource: [email protected]{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}
l'attuatore mi dimostra che il mio codice sostituito l'origine dati:
Ma le impostazioni non sono un ctivato, che posso vedere durante la profilazione dell'applicazione. Il defaultRowPrefetch
è ancora a 10
che causa il mio SELECT
s di essere molto più lento di quanto sarebbe se 1000
è stato attivato.
modifica delle proprietà è non andare a lavorare, quelle non sono le proprietà che si desidera modificare ... –
@ M.Deinum ho pensato queste erano le proprietà passarono durante la connessione al driver JDBC. Cosa li rende diversi da quello che pensavo? – Marged
No non vengono passati durante la connessione. Queste sono le proprietà interne utilizzate da 'DataSourceBuilder' e contengono solo un piccolo numero di proprietà utilizzabili per uso interno. –