Приложение Spring Boot MySQL SocketTimeoutException - PullRequest
0 голосов
/ 07 марта 2019

У меня есть приложение, которое использует Spring Boot, которое работает как демон и выполняет обработку каждые 24 часа, в котором оно использует MySQL. Я выпустил его вчера, и сегодня он впервые попытался выполнить обработку, но, к сожалению, я получил следующую ошибку (соответствующие сегменты стека):

08:00:31.264 [pool-1-thread-1] ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
...
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
...
Caused by: java.net.SocketTimeoutException: connect timed out

Я сомневаюсь, что в то время что-то не так с MySQL, я более склонен к тому, что, возможно, соединение устарело, хотя я думаю, что пул соединений должен позаботиться об этом.

Кто-нибудь сталкивался с подобной ситуацией и смог ее разрешить? Пожалуйста, дайте мне знать, какую другую соответствующую информацию я должен опубликовать. Вот мой application.properties без информации о безопасности, конечно:

spring.datasource.url=jdbc:mysql://<server>:3306/<schema>?characterEncoding=UTF-8&useUnicode=true
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Соответствующее содержание pom.xml:

... 
<properties>
    ...
    <mysql-connector-java.version>5.1.38</mysql-connector-java.version>
    <spring.boot.version>2.1.3.RELEASE</spring.boot.version>
    ...
</properties>

<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-connector-java.version}</version>
    </dependency>
    ...
</dependencies>
...

Приложение использует JdbcTemplate, который предоставляет Spring Boot.

1 Ответ

0 голосов
/ 07 марта 2019

1) Это происходит из-за неактивности созданного соединения с базой данных

Чтобы избежать этого, просто добавьте следующие свойства в application.properties.

spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.validationQuery = SELECT 1

Это завершит действие попросто запустив запрос SELECT 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...