Spring-Boot è uno strumento davvero fantastico, ma la documentazione è un po ‘scarsa per quanto riguarda la configurazione più avanzata. Come posso impostare proprietà come la dimensione massima per il mio pool di connessione al database?
Spring-Boot supporta tomcat-jdbc
, HikariCP
e Commons DBCP
nativamente sono tutti configurati allo stesso modo?
Si scopre che l’impostazione di queste proprietà di configurazione è piuttosto semplice, ma la documentazione ufficiale è più generale, quindi potrebbe essere difficile da trovare durante la ricerca specifica delle informazioni di configurazione del pool di connessioni.
Per impostare la dimensione massima del pool per tomcat-jdbc, impostare questa proprietà nel file .properties o .yml:
spring.datasource.maxActive=5
Puoi anche usare il seguente se preferisci:
spring.datasource.max-active=5
È ansible impostare qualsiasi proprietà del pool di connessioni che si desidera in questo modo. Ecco un elenco completo delle proprietà supportate da tomcat-jdbc
.
Per capire come funziona in generale è necessario scavare un po ‘nel codice Spring-Boot.
Spring-Boot costruisce il DataSource come questo ( vedi qui , riga 102):
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX) @Bean public DataSource dataSource() { DataSourceBuilder factory = DataSourceBuilder .create(this.properties.getClassLoader()) .driverClassName(this.properties.getDriverClassName()) .url(this.properties.getUrl()) .username(this.properties.getUsername()) .password(this.properties.getPassword()); return factory.build(); }
DataSourceBuilder è responsabile di determinare quale libreria di pool utilizzare, controllando ciascuna di una serie di classi conosciute sul classpath. Quindi costruisce il DataSource e lo restituisce alla funzione dataSource()
.
A questo punto, la magia inizia a usare @ConfigurationProperties
. Questa annotazione indica a Spring di cercare le proprietà con il prefisso CONFIGURATION_PREFIX
(che è spring.datasource
). Per ogni proprietà che inizia con quel prefisso, Spring proverà a chiamare il setter sul DataSource con quella proprietà.
Tomcat DataSource è un’estensione di DataSourceProxy , che ha il metodo setMaxActive()
.
Ed è così che spring.datasource.maxActive=5
viene applicato correttamente!
Non ho provato, ma se stai usando uno degli altri pool di connessione supportati da Spring-Boot (attualmente HikariCP o Commons DBCP) dovresti essere in grado di impostare le proprietà allo stesso modo, ma dovrai guardare il progetto documentazione per sapere cosa è disponibile.
Alla versione corrente di Spring-Boot (1.4.1.RELEASE), ciascuna implementazione di datasource di pool ha il proprio prefisso per le proprietà.
Ad esempio, se si utilizza tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
Puoi trovare la spiegazione qui
spring.datasource.max-wait=10000
questo non ha più alcun effetto.
Ad esempio Tomcat (predefinito) si aspetta:
spring.datasource.ourdb.url=...
e HikariCP sarà felice con:
spring.datasource.ourdb.jdbc-url=...
Possiamo soddisfare entrambi senza configurazione di boilerplate:
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
Dai un’occhiata all’origine DataSourceBuilder.java
Se Tomcat, HikariCP o Commons DBCP si trovano sul classpath, verrà selezionato uno di essi (in questo ordine con Tomcat per primo).
… così, possiamo facilmente sostituire il provider del pool di connessione usando questa configurazione maven (pom.xml):
org.springframework.boot spring-boot-starter-jdbc org.apache.tomcat tomcat-jdbc com.zaxxer HikariCP