JDBC Client Spring: Pool läuft voll

OnDemand

Top Contributor
Moin zusammen,

ich nutze grad mal den JDBC Client https://www.danvega.dev/blog/spring-jdbc-client

Dabei fällt mir auf, dass der Pool vollläuft. 10 Verbindungen nutzt er, die sind dann im idle, aber irgendwie werden die nicht mehr freigegeben. Erst wenn ich die App neu starte, werden die Verbindungen wieder freigeben.

Hat jemand eine Idee und könnte mir auf die Sprünge helfen? Hab auch schon maxLifetime runter genommen, aber da tut sich auch nix.

Java:
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=${DATASOURCE_URL}
spring.datasource.username=${DATASOURCE_USER}
spring.datasource.password=${DATASOURCE_PASSWORD}
spring.jpa.generate-ddl=false
spring.jpa.enabled=false
spring.jpa.hibernate.ddl-auto=none
spring.datasource.hikari.maximumPoolSize=10
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.maxLifetime=1800000

Java:
@Repository
public class OfferRepository {

    @Autowired
    private JdbcClient jdbcClient;

    public int getCountPendingOffers(Optional<Void> filter) {
        return jdbcClient.sql("SELECT COUNT(*)xxxxxx")
                .param("customerId", filter.get())
                .query(Integer.class)
                .single();
    }

}
 

Oneixee5

Top Contributor
Vermutlich liegt das an dem Optional<Void> filter - Parameter, die Abfrage wird ewig warten, bis da etwas herauskommt.
Optional ist kein Datentyp für Parameter sondern für die Rückgabe von Methoden - das Thema hatten wir schon mal.
 

thecain

Top Contributor
Hikari versucht doch immer ein paar Sessions bereit zu halten
idle ist mMn korrekt, wenn sie auch wiederverwendet werden.

Vll könnte man minmumIdle auf 0 setzen, damit die sessions mal auf 0 runter gehen.
 

OnDemand

Top Contributor
Vermutlich liegt das an dem Optional<Void> filter - Parameter, die Abfrage wird ewig warten, bis da etwas herauskommt.
Optional ist kein Datentyp für Parameter sondern für die Rückgabe von Methoden - das Thema hatten wir schon mal.
Selbiges Verhalten tritt allerdings auch auf, wenn ich einen Integer als Parameter übergebe
Vll könnte man minmumIdle auf 0 setzen, damit die sessions mal auf 0 runter gehen.

spring.datasource.hikari.minimum-idle=0
hat leider auch nichts gebracht, hm echt strange.

Irgendwie scheint es ein anderer Query zu sein der nicht fertig wird und daher die Verbindung nicht wieder freigibt. Oder liegt das an JDBCClient dass man da die Verbindung wieder freigeben muss? Aber das wäre nicht im Sinne des Erfinders, muss irgendeine andere Ursache haben

Edit: hab meine 3, 4 Queries manuell ausgeführt, da wartet nix ewig oder so. Ergebnisse kommen sofort. Das muss also irgendwas in der Konfiguration sein
 
Zuletzt bearbeitet:

LimDul

Top Contributor
Im Zweifellsfall bei sowas das Log Level hochdrehen, das man sieht welche SQL Querys abgesetzt werden - ggf. Log Statements in die Methoden einbauen (before/after Query).
 

OnDemand

Top Contributor
Es lag an einer Methode, die einen Stream zurück gegeben hat. So hier funktioniert es:

Java:
    public List<OrderRecord> findWithPagination(int offset, int limit, int supplierId) {
        try (Stream<OrderRecord> stream = jdbcClient.sql(selectAllOrdersLimited)
                .param("offset", offset)
                .param("limit", limit)
                .param("meineId", supplierId)
                .query(OrderRecord.class)
                .stream()) {
            return stream.collect(Collectors.toList());
        }
    }

vorher:

Java:
    public Stream<OrderRecord> findWithPagination(int offset, int limit, int supplierId) {
        return jdbcClient.sql(selectAllOrdersLimited)
                .param("offset", offset)
                .param("limit", limit)
                .param("meineId", supplierId)
                .query(OrderRecord.class)
                .stream();
    }

Was aber ist da genau das Problem? Der Stream wird offenbar nicht beendet oder ähnlich?
 

Oneixee5

Top Contributor
Hier würde die Doku weiterhelfen:

Streaming Results​


When you specify Stream as the return type of a query method, Spring Data JDBC returns elements as soon as they become available. When dealing with large amounts of data this is suitable for reducing latency and memory requirements.

The stream contains an open connection to the database. To avoid memory leaks, that connection needs to be closed eventually, by closing the stream. The recommended way to do that is a try-with-resource clause. It also means that, once the connection to the database is closed, the stream cannot obtain further elements and likely throws an exception.

Also formal ist deine 1. Variante richtig und die 2. schließt die Verbindung nicht. Allerdings könnte man auch gleich JdbcClient.list() aufrufen.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Einfache JDBC-Datenbank mit Admin-Client Datenbankprogrammierung 4
T JDBC und Client/Server Datenbankprogrammierung 12
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
G JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F Fehlerhandling bei JDBC Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben