jbrudek | 2021-02-17 10:25:32 UTC | #1
Witajcie to znowu ja, tym razem mam problem z błędem MySQL, nie wiem co spowodowało ten błąd, ale kiedy jestem sam na serwerze wszystko działa bardzo dobrze, a gdy wejdzie ktoś więcej to nagle wywala takie błędy:
Pastebin bo za długie błędy
riko.dev | 2020-06-08 10:58:41 UTC | #2
Wystarczy zapoznać się z informacją w konsoli.
Could not create connection to database server. Attempted reconnect 3 times. Giving up.
Plugin nie może połączyć się z serwerem. Sprawdź, czy wpisane w konfiguracji dane są poprawne. Możliwe, że ten serwer MySQL pozwala tylko na połączenia z wewnątrz.
jbrudek | 2020-06-08 11:03:32 UTC | #3
Dzięki za szybką odpowiedź, ale mysql działa, problem robi się przy połączeniu się kolejnego gracza
psycho | 2020-06-08 11:12:37 UTC | #4
A nie tworzysz nowego połączenia przy jego połączeniu?
jbrudek | 2020-06-08 11:13:51 UTC | #5
tworzę ale je zamykam, czy to źle?, bo jeśli jestem sam na serwerze jest OK, gdy jest 2 już nie.
psycho | 2020-06-08 11:14:47 UTC | #6
Moim zdaniem wszystko powinno się opierać o jedno połączenie/pool, który wykonywałby kolejne kwerendy i był zamykany przy zamknięciu pluginu / utracie połączenia z bazą danych.
jbrudek | 2020-06-08 11:16:41 UTC | #7
hm, przeczytałem że wyjątek com.mysql.jdbc.exceptions.jdbc4.CommunicationsException powstaje po pewnym czasie bezczynności. Ciekawe co mówisz bo jedni mówią że połączenia powinno się zamykać i tworzyć nowe, a niektórzy żeby korzystać z jednego
Nieznajomy11 | 2020-06-08 11:18:08 UTC | #8
Powinno się dać zająć połączeniami bibliotece (np hikaricp), a nie wymyślać. Jedno połączenie to chyba prawie zawsze zła opcja w aplikacji, która ciągle pracuje.
jbrudek | 2020-06-08 11:27:20 UTC | #9
Wracając do tematu; jakieś pomysły?
EDIT: Skłaniam się ku temu, że połączenie jest przerywane, spróbuje wykonywać zapytanie SELECT NOW() co minutę, zapobiegnie to bezczynności. Jeśli macie jakieś pomysły, podrzućcie coś :slight_smile:
Nieznajomy11 | 2020-06-08 11:50:31 UTC | #10
Nie wiemy nic o twojej aplikacji, jak jest zaimplementowane połączenie z bazą. Po samym błędzie nic nie można powiedzieć więcej, niż polecić używanie biblioteki z automatycznym zarządzaniem połączeniami.
jbrudek | 2020-06-08 11:55:36 UTC | #11
Chodzi o to?
Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();
result = st.executeQuery(query);
Nieznajomy11 | 2020-06-08 12:18:43 UTC | #12
W tym kodzie nigdzie nie ma zamykania połączenia widocznego, a klasa DriverManager wydaje się być stworzoną przez ciebie. Nadal nic nie da się tutaj powiedzieć.
jbrudek | 2020-06-08 12:22:16 UTC | #13
Klasa DriverManager pochodzi z package java.sql
Cała metoda
Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();
result = st.executeQuery(cos);
String isBan = null;
Long date = null;
if(result.next())
{
isBan = result.getString("NICK");
date = result.getLong("ENDTIME");
}
connection.close();
Nieznajomy11 | 2020-06-08 12:47:54 UTC | #14
Powinieneś używać do obsługi Closeable try-catch-finally lub najlepiej try-with-resources. Jest jakiś konkretny powód, dla którego nie używasz biblioteki do obsługi bazy danych?
jbrudek | 2020-06-08 15:53:37 UTC | #15
Nie ma, polecisz jakiś poradnik do bibliotek?
Nieznajomy11 | 2020-06-11 10:12:03 UTC | #16
https://www.baeldung.com/hikaricp
system | 2021-02-17 10:25:34 UTC | #17
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.