Sonntag, April 5, 2020

Spring-boot + JDBC + HSQLDB: Wie um zu Überprüfen, ob Spring Boot ist mit einem Verbindungs-Pool?

Laut diese Dokumentation:

29.1.1 Eingebettete Datenbank-Unterstützung

Frühling Starten können die automatische Konfiguration eingebettete H2, HSQL und Derby-Datenbanken.
Sie brauchen nicht, um alle Verbindungs-URLs, enthalten einfach eine bauen
in Abhängigkeit von der eingebetteten Datenbank, die Sie verwenden möchten.

und

29.1.2-Verbindung zu einem Produktions-Datenbank

Produktion Datenbank-verbindungen können auch auto-Konfiguration unter einem pooling
DataSource.

DataSource-Konfiguration wird gesteuert durch eine externe Konfiguration
Eigenschaften im Frühjahr.datasource.*. Zum Beispiel könnten Sie erklären, die
folgenden Abschnitt in der Anwendung.Eigenschaften:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

[Tipp] Sie
oft wird nicht müssen Sie die driver-class-name, da Spring boot
ableiten kann, ist es für die meisten Datenbanken aus der url.

[Hinweis] Für eine Zusammenlegung
DataSource angelegt werden, wir müssen in der Lage sein, um zu überprüfen, dass ein Gültiger
Fahrer Klasse verfügbar ist, so prüfen wir für Sie, dass, bevor Sie irgend etwas tun.
I. e. wenn Sie
Frühjahr.datasource.driver-class-name=com.mysql.jdbc.Treiber dann, dass
Klasse muss belastbar sein.


Was ist, wenn ich die folgenden in meinem Anwendung.Eigenschaften Datei:

spring.datasource.url=jdbc:hsqldb:file:db/organization-db
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver

Wird Frühling-Boot-auto-konfigurieren einer pooling-Datasource, da ich angegeben das Frühjahr.datasource.driver-class-name?


Oder wird es einfach erstellen Sie eine Datenquelle für die eingebettete Datenbank-Treiber, ohne die Verbindungs-pooling?


Wie kann ich bestätigen, wenn Spring Boot ist mit Verbindungs-pooling?

InformationsquelleAutor Paul | 2016-04-12

2 Kommentare

  1. 0

    Mein Verständnis ist, dass, solange es ist eine datasource-Klasse auf dem Klassenpfad spring-boot verwenden, mit tomcat als die Voreinstellung, falls kein anderer angegeben ist.

    Die Liste der unterstützten Datenquellen ist gegeben in DataSourceBuilder, und aktuell ist tomcat, hikari, dbcp und dbcp2.

    Könnte man überprüfen, wenn eine erstellt wurde, die von der Suche nach javax.sql.Datasource – Implementierungen aus dem Anwendungskontext, aber ich sehe nicht ein, warum man nicht.

    https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java

    • Docs sagen, dass es nicht konfigurieren Sie den pool, wenn Sie definieren eine DataSource @Bean überall in der app. docs.Frühling.io/spring-boot/docs/1.5.16.VERÖFFENTLICHUNG/Referenz/… Additional connection pools can always be configured manually. If you define your own DataSource bean, auto-configuration will not occur. ich hatte bis Oauth2 und folgten dem guide und hatte @Bean(name = "OAuth") @ConfigurationProperties(prefix="spring.datasource") public DataSource secondaryDataSource() {...} für eine JDBC-token speichern und der pool wurde nicht konfiguriert.
  2. 5

    Danke für deine Antwort Dave. Ich bin gerade erst anfangen zu lernen, Spring framework, also bin ich basteln mit ihm. Dies ist, was ich in MyApplication.main Methode zu bestätigen, wenn der Frühling Boot ist mit Verbindungs-pooling:

    ApplicationContext context = SpringApplication.run(MyApplication.class);
    DataSource dataSource = context.getBean(javax.sql.DataSource.class);
    System.out.println("DATASOURCE = " + dataSource);

    Und ich bekam die folgende Ausgabe:

    DATASOURCE = org.apache.tomcat.jdbc.pool.[email protected]{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=org.hsqldb.jdbcDriver; maxActive=100; maxIdle=100; minIdle=10; initialSize=10; maxWait=30000; testOnBorrow=false; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:hsqldb:mem:testdb; username=sa; validationQuery=null; validationQueryTimeout=-1; validatorClassName=null; validationInterval=30000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; }

    Ich auch versucht, verschiedene Konfigurationen mit Anwendung.Eigenschaften Datei und meine bauen.grade – Datei, um zu bestätigen, wenn der Frühling Boot würde noch Verbindungspooling verwenden, wenn Sie die automatische Konfiguration eines DataSource -, und ich fand heraus, dass die Spring-Boot-auto-Konfiguration erzeugt immer eine Bündelung DataSource.

    • Es wird offenbar immer erstellt einen pool, wenn der pool ist vorhanden, aber es wird nicht immer konfigurieren! Zum Beispiel: testOnBorrow=true; validationQuery=/* ping */ SELECT 1; wenn automatisch konfiguriert, aber wenn Sie eine DataSource-bean irgendwo in deiner app, dann wird nicht gesetzt werden, und das buchstabiert Mühe für MySQL, die tötet verbindungen nach rund 8 Stunden.

Kostenlose Online-Tests