Comment définir les propriétés de la connexion à la source de données au Printemps de Démarrage 1.3.x avec par défaut de Tomcat pool de connexion

J'ai besoin de régler certaines Oracle JDBC dans les propriétés de connexion afin d'accélérer lot INSERTs (defaultBatchValue) et la masse SELECTs (defaultRowPrefetch).
J'ai eu suggestions comment réaliser cela avec DBCP (Merci à M. Deinum) mais je voudrais:

  • conserver la valeur par défaut de Tomcat pool de connexions jdbc
  • garder de l'application.yml pour la configuration

Je pensais à une demande de fonctionnalité pour soutenir spring.datasource.custom_connection_properties ou similaires dans l'avenir et de ce fait essayé de le prétend ce qui était déjà possible. Je l'ai fait en transmettant les informations pertinentes lors de la création de la source de données et manipulé la création de la source de données comme ceci:

@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;
}

Dans les logs je vois que je suis la création de la bonne source de données:

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}

L'actionneur me montre que mon code a remplacé la source de données:

Comment définir les propriétés de la connexion à la source de données au Printemps de Démarrage 1.3.x avec par défaut de Tomcat pool de connexion

Mais les paramètres ne sont pas activé, je peux voir tout le profil de l'application. Le defaultRowPrefetch est encore à 10 qui provoque mon SELECTs être beaucoup plus lent que ce qu'ils seraient si 1000 a été activé.

  • La modification des propriétés n'est pas d'aller travailler, ce ne sont pas les propriétés que vous souhaitez modifier...
  • Je pensais que c'étaient les propriétés transmises lors de la connexion du pilote JDBC. Ce qui les rend différent de ce à quoi j'ai pensé ?
  • Non, ils ne sont pas transmis lors de la connexion. Ce sont les propriétés internes utilisés par le DataSourceBuilder et ne contiennent qu'un petit nombre de utilisable propriétés pour une utilisation interne.
  • Vous avez raison, j'ai quitté cette grâce dans le débogueur et vu que même si DataSourceBuilder honorer ces propriétés tomcat source des données jdbc / ~Proxy ne fournit pas directement setter pour cela.
InformationsquelleAutor Marged | 2016-01-18