Mam fajną, małą aplikację internetową Spring Boot JPA. Jest wdrażany na Amazon Beanstalk i używa Amazon RDS do utrwalania danych. Jednak nie jest używany tak często i dlatego po pewnym czasie zawodzi z tego rodzaju wyjątkiem:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ostatni pakiet pomyślnie odebrany z serwera był 79 870 633 milisekund temu.
Ostatni pakiet pomyślnie wysłany do serwera był 79 870 634 milisekund temu. jest dłuższy niż wartość „wait_timeout” skonfigurowana przez serwer. Aby uniknąć tego problemu, należy rozważyć wygaśnięcie i / lub przetestowanie ważności połączenia przed użyciem w aplikacji, zwiększenie skonfigurowanych przez serwer wartości limitów czasu klienta lub użycie właściwości połączenia łącznika / J „autoReconnect = true”.
Nie jestem pewien, jak skonfigurować to ustawienie i nie mogę znaleźć informacji na jego temat na http://spring.io (choć bardzo dobra strona). Jakie są pomysły lub wskazówki do informacji?
źródło
DataSource
i zweryfikować jego właściwości. stackoverflow.com/a/36586630/148844 Wiosna Boot nie będzie auto-KonfiguracjaDataSource
jeśli masz jakieś@Beans
, które definiująDataSource
. docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/…Odpowiedzi:
Zakładam, że boot konfiguruje
DataSource
dla Ciebie. W tym przypadku i ponieważ używasz MySQL, możesz dodać następujące elementy do swojej wersjiapplication.properties
1.3Jak djxak zauważono w komentarzu, 1.4+ Definiuje specyficzne przestrzenie nazw dla czterech połączeń basenów Wiosna Boot Obsługuje:
tomcat
,hikari
,dbcp
,dbcp2
(dbcp
jest przestarzała 1,5). Musisz sprawdzić, której puli połączeń używasz i czy ta funkcja jest obsługiwana. Powyższy przykład dotyczy tomcata, więc w 1.4+ musiałbyś napisać go następująco:Należy pamiętać, że używanie
autoReconnect
jest nie zalecane :źródło
spring.datasource.testOnBorrow
ispring.datasource.test-on-borrow
będą działać dobrze. Sprawdzić dokumentację po więcej szczegółów.SELECT 1
gwarantuje, że połączenie zostało przetestowane przed przekazaniem aplikacji. UżywająctestOnBorrow = true
, obiekty zostaną sprawdzone przed wypożyczeniem z puli. Jeśli obiekt nie przejdzie walidacji, zostanie usunięty z puli i spróbuje pożyczyć inną. UWAGA - aby wartość true miała jakikolwiek efekt, parametr validationQuery musi być ustawiony na ciąg inny niż null.tomcat
,hikari
,dbcp
,dbcp2
. Na przykład dlatomcat-jdbc
puli połączeń właściwości powinny być następujące:spring.datasource.tomcat.testOnBorrow=true
ispring.datasource.tomcat.validationQuery=SELECT 1
.If you define your own DataSource bean, auto-configuration will not occur.
zgodnie z przewodnikiem dla OAuth2 i miałem@Bean(name = "OAuth") public DataSource secondaryDataSource()...
i nie został on automatycznie skonfigurowany ani użytytestOnBorrow
.Powyższe sugestie nie działają dla mnie. To, co naprawdę zadziałało, to włączenie następujących wierszy do pliku application.properties
Możesz znaleźć wyjaśnienie tutaj
źródło
Ustawienie
spring.datasource.tomcat.testOnBorrow=true
w application.properties nie działa.Programowe ustawienie jak poniżej działało bez żadnych problemów.
źródło
Właśnie przeniosłem się do Spring Boot 1.4 i odkryłem, że nazwy tych właściwości zostały zmienione:
źródło
odpowiedź whoami jest poprawna. Używając właściwości zgodnie z sugestią, nie mogłem tego uruchomić (używając Spring Boot 1.5.3.RELEASE)
Dodaję odpowiedź, ponieważ jest to pełna klasa konfiguracji, więc może pomóc komuś używającemu Spring Boot:
źródło
Mam podobny problem. Spring 4 i Tomcat 8. Rozwiązuję problem z konfiguracją Springa
Testowałem. To dobrze działa! Te dwie linie robią wszystko, aby ponownie połączyć się z bazą danych:
źródło
W przypadku, gdy ktoś używa niestandardowego źródła danych
Właściwości powinny wyglądać następująco. Zwróć uwagę na @ConfigurationProperties z prefiksem. Przedrostek to wszystko przed rzeczywistą nazwą właściwości
Odniesienie do wersji wiosennej 1.4.4. RELEASE
źródło
Jak niektórzy już zauważyli, spring-boot 1.4+ ma określone przestrzenie nazw dla czterech pul połączeń. Domyślnie hikaricp jest używany w spring-boot 2+. Będziesz więc musiał określić tutaj SQL. Wartość domyślna to
SELECT 1
. Oto, czego potrzebujesz na przykład dla DB2:spring.datasource.hikari.connection-test-query=SELECT current date FROM sysibm.sysdummy1
Uwaga : jeśli sterownik obsługuje JDBC4, zdecydowanie odradzamy ustawianie tej właściwości. Dotyczy to sterowników „starszych”, które nie obsługują funkcji API JDBC4 Connection.isValid (). Jest to zapytanie, które zostanie wykonane tuż przed uzyskaniem połączenia z puli w celu sprawdzenia, czy połączenie z bazą danych nadal działa. Ponownie spróbuj uruchomić pulę bez tej właściwości, HikariCP zarejestruje błąd, jeśli sterownik nie jest zgodny z JDBC4, aby Cię o tym powiadomić. Domyślnie: brak
źródło
Dla tych, którzy chcą to zrobić z YAML z wieloma źródłami danych, jest na ten temat świetny wpis na blogu: https://springframework.guru/how-to-configure-multiple-data-sources-in-a-spring-boot -podanie/
Zasadniczo mówi, że oboje musicie skonfigurować właściwości źródła danych i źródło danych w następujący sposób:
Nie zapomnij usunąć
@Primary
z innych źródeł danych.źródło