MySQL "Too many connections" auch nach schliessen der Connections.

Zakon

Bekanntes Mitglied
Hallo zusammen,

ich programmiere mir gerade eine Webapp mit Vaadin.
Für die Datenbank anbindung benutze ich HikariPool bzw HakariDataSource und zum ausführen der Stmt jdbTemplate.

Folgendes Problem:
Wenn ich die Seite ein paar mal hinterheinander neu lade, bekomme ich eine:

"Data source rejected establishment of connection, message from server: "Too many connections"

[CODE lang="java" title="DatabaseConfiguration"]@Configuration
public class DatabaseConfig {
private HikariDataSource dataSource;

@Bean
public DataSource configureDatasource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/music")
.username("root")
.password("root")
.build();
}

protected HikariDataSource getDatasource(){
if(dataSource == null || dataSource.isClosed()){
dataSource = new HikariDataSource();
dataSource.setDataSource(configureDatasource());
dataSource.setMaximumPoolSize(10);
dataSource.setMaxLifetime(30000);
return dataSource;
}else{
return dataSource;
}
}
}
[/CODE]
[CODE lang="java" title="DatabaseService"] public DatabaseService() {
jdbcTemplate.setDataSource(databaseConfig.getDatasource());
}

//GET
/**
* Get the UserPlaylist from Database
*
* @return List of Songs
*/
public UserPlaylist getUserPLaylist(String id) {
UserPlaylist userplaylist =new UserPlaylist(jdbcTemplate.query(
getUserplaylistQuerry, new Object[]{id}, new BeanPropertyRowMapper<>(Song.class)));
closeConnection();
return userplaylist;
}

private void closeConnection(){
try {
jdbcTemplate.getDataSource().getConnection().close();
} catch (SQLException e) {
e.printStackTrace();
}
}
[/CODE]


Ich schliesse eigenlich nach jedem Statement die Connection. Meine MaxLifeTime beträgt auch nur 30sekunden.
Bedeutet jede Connection sollte nach 30 sekunden sowieso geschlossen werden.
Ich bekomme jedoch immer die Fehlermeldung "Too many Connections".
Mir ist bewusst das es von der Datenbank kommt und nicht von meinem Connection Pool jedoch verstehe ich nicht warum die Connections so lange aufrecht bleiben.

Vielleicht noch Interessant zu wissen nach jedem Seiten reloade erstellt Hikari ein neuen Pool. Siehe anhang.

Zusatzfrage:
Brauche ich überhaupt mehrere Connections wenn das ganze auf einem Server läuft? Oder gehen dann meine User alle über "eine" connection bzw einem Connection Pool auf die Datenbank?
 

Anhänge

  • Screenshot 2022-01-10 203921.png
    Screenshot 2022-01-10 203921.png
    82,5 KB · Aufrufe: 0
Zuletzt bearbeitet:

thecain

Top Contributor
Ja, hikari behält immer eine Menge Sessions alive. Default ässig glaube ich sogar die max pool size.

Edit
minimumIdle
This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than maximumPoolSize, HikariCP will make a best effort to add additional connections quickly and efficiently. However, for maximum performance and responsiveness to spike demands, we recommend not setting this value and instead allowing HikariCP to act as a fixed size connection pool. Default: same as maximumPoolSize
 

Zakon

Bekanntes Mitglied
Ja stimmt. Habe das mit den connection close() auch hinbekommen nur dann zerstöre ich mir die ConnectionPool logik. Knannst du mir denn erklären warum ich bei jedem Refresh der Seite in ein neuen Pool gewoirfen werde? Warum komme ich nicht in den alten?
 

thecain

Top Contributor
Dazu müsste ich mehr vom Code sehen, aber du benutzt doch Spring, wenn ich das Recht sehe. Dann könntst du das Erstellen der Datasource auch Spring überlassen. Version 2.x mit spring-data-jdbc verwendet default mässig hikari als Connection Pool.

Siehe: https://www.baeldung.com/spring-boot-hikari und in der Spring Doku.

Das explizite schliessen der Connection dürfte mMn auch nicht nötig sein. Aber ich muss auch anfügen, dass ich ausser Spring Batch eher auf der JEE schiene unterwegs bin. Evtl hat jemand schon mehr Erfahrung mit Webapps und Spring gemacht und kann noch etwas ergänzen/korrigieren
 
K

kneitzel

Gast
Bei einem Connection Pool wird close() doch auch benötigt. Nur eben schließt das nicht die Vonnection sondern markiert die Vonnection als Verfügbar.

Wäre auch ein bescheidenes Design, wenn AutoVlosable nicht mehr zu schließen wären.
 

Zakon

Bekanntes Mitglied
Danke erstmal für eure Hilfe. Ich habe jetzt alles nochmla neu geschrieben und mich an die Documentation gehalten. Das Problem mit den ConenctionPool besteht jedoch immer noch.
Wenn ich die Seite neu lade, erwarte ich eigtnlich, dass ich in meinen alten Connection Pool zurück komme oder wenigstens der alte geschlossen wird.
Tatsächlich werden aber bei jedem seiten refresh 2 Connection Pools gestartet und initialisiert. (Siehe Anhang oben)
[CODE lang="java" title="DatabaseService"]public class DatabaseService {
private DatabaseConfig databaseConfig = new DatabaseConfig();
public DatabaseService() {
jdbcTemplate.setDataSource(databaseConfig.customDatasource());
}

//GET
/**
* Get the UserPlaylist from Database
*
* @return List of Songs
*/
public UserPlaylist getUserPLaylist(String id) {
UserPlaylist userPlaylist = new UserPlaylist(jdbcTemplate.query(
getUserplaylistQuerry, new Object[]{id}, new BeanPropertyRowMapper<>(Song.class)));
closeConnection();
return userPlaylist;
}
}[/CODE]
[CODE lang="java" title="DatabaseConfig"]@Configuration
public class DatabaseConfig {

@Bean(name="customDataSource")
@ConfigurationProperties("spring.datasource")
public DataSource customDatasource(){
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/music")
.username("root")
.password("root")
.build();
}
}[/CODE]
[CODE lang="java" title="PlaylistLogic"]public class PlaylistLogic {
@Autowired
private DatabaseService databaseService;

//Objects
UserPlaylist userPlaylist;
User user;

public PlaylistLogic() {
this.databaseService = new DatabaseService();
user = (User) UI.getCurrent().getSession().getAttribute("user");
}
/**
* Get the UserPlaylist from Database
* @return UserPlaylist
*/
public UserPlaylist getUserPlaylist(String userId){
return userPlaylist = databaseService.getUserPLaylist(userId);
}
}
[/CODE]
[CODE lang="java" title="CreatePlaylistView"]public class CreatePlaylistView extends VerticalLayout implements HasUrlParameter<String> {
/**
* URL Parameter
* @param event
* @param parameter
*/
@Override
public void setParameter(BeforeEvent event,
@OptionalParameter String parameter) {
if(parameter == null || parameter.isEmpty()){
//Pass User to Startpage
UI.getCurrent().navigate(StartView.class);
UI.getCurrent().getPage().reload();
}else{
//User from Datenbank
this.userLogic = new UserLogic();

user = userLogic.getUser(parameter);

this.playlistLogic = new PlaylistLogic();
this.resultlistLogic = new ResultlistLogic();

userPlaylist = playlistLogic.getUserPlaylist(user.getId());

playlistGrid.setItems(userPlaylist);
playlistHeader.setText(user.getName());
}
}
}[/CODE]

Das wäre jetzt ein kompletter Weg von Oberfläche zur Datenbank. Hoffe das reicht. :)
 

thecain

Top Contributor
this.databaseService = new DatabaseService();
Das hier ist auf jeden Fall nicht korrekt. Spring erstellt dir diese Klasse via Depemdency Injection. Du solltest sie selber nicht erstellen müssen.

PlaylistLogic müsste auch ein SpringBean sein und dann ins UI injected werden. So wie es jetzt ist, wirst du wohl pro Request alle Klassen erstellen.
 

fhoffmann

Top Contributor
Hoffe das reicht.
Nein, das reicht nicht.
In der Klasse DatabaseService rufst du eine Methode closeConnection() auf, die in der Klasse nicht definiert ist. Sie ist allerdings in deinem ursprünglichen Code definiert. Aber glaubst du wirklich, dass wir den gebotenen Code mit dem ursprünglichen Code kombinieren? Und im ursprünglichen Code wird in closeConnetion aufgerufen: jdbcTemplate.getDataSource().getConnection().close(); den Code von jdbcTemplate (ist das eine Klasse (die werden normalerweise groß geschrieben) oder ein Member?) zeigst du uns auch nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
rambozola mysql to many connections Datenbankprogrammierung 27
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
kaoZ HyperSQL vs. MYSQL Datenbankprogrammierung 4
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
V Internationalization mit MySql Datenbankprogrammierung 1
K Adressverwaltung mit MySql und Java? Datenbankprogrammierung 11
M Java Mysql verbinden Datenbankprogrammierung 3
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben