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?
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
Zuletzt bearbeitet: