Репликация соединения недоступна, время запроса истекло после XXms.для весеннего проекта загрузки - PullRequest
0 голосов
/ 23 сентября 2019

Мой весенний загрузочный проект иногда не может восстановить соединение из-за тайм-аута запроса.Чтобы устранить эту проблему, я пытаюсь воссоздать проблему, установив одну и ту же конфигурацию для базы данных и моего проекта весенней загрузки, но я все еще не могу получить то исключение, которое хочу получить.Как я могу воссоздать эту проблему?

Вот конфигурация базы данных для тайм-аута

connect_timeout 10
delayed_insert_timeout  300
have_statement_timeout  YES
innodb_flush_log_at_timeout 1
innodb_lock_wait_timeout    50
innodb_rollback_on_timeout  OFF
interactive_timeout 28800
lock_wait_timeout   31536000
mysqlx_connect_timeout  30
mysqlx_idle_worker_thread_timeout   60
mysqlx_interactive_timeout  28800
mysqlx_port_open_timeout    0
mysqlx_read_timeout 30
mysqlx_wait_timeout 28800
mysqlx_write_timeout    60
net_read_timeout    30
net_write_timeout   60
rpl_stop_slave_timeout  31536000
slave_net_timeout   60
wait_timeout    28800

Моя конфигурация загрузки Spring

spring.datasource.url=jdbc:mysql://server:3306/dbtest?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=[password]
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.show-sql=true
spring.datasource.hikari.leak-detection-threshold=30000
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.max-lifetime=180000
spring.datasource.hikari.idle-timeout=120000
spring.datasource.hikari.maximum-pool-size=1

В моем классе контроллера это имеетследующее:

package com.example.dbpool.controller;

import com.example.dbpool.entity.ResultEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

@RestController
@Slf4j
public class RestfulController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping(value = "/test")
    public ResponseEntity<ResultEntity> test() throws InterruptedException{
        //LOGGER.info("Logger test");
        dbtest();
        ResultEntity result = ResultEntity.builder().result("SUCCESS").build();
        return new ResponseEntity<>(result, HttpStatus.OK);
    }

    public void dbtest() throws InterruptedException {
        LocalDateTime now = LocalDateTime.now();
        LOGGER.info("DB test on {} on schedule 1", now);
        String transactionId = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + String
            .format("%07d", ThreadLocalRandom.current().nextInt(0, 10000000));
        jdbcTemplate.update("insert into timeouttest(transactionid, request) values (?,?)", transactionId,
            UUID.randomUUID().toString());

        LOGGER.info("Sleep for 1 minute");
        Thread.sleep(60000);
        LOGGER.info("Begin to update response");
        int rows = jdbcTemplate
            .update("update timeouttest set Response = ? where transactionid = ?", "SUCCESS", transactionId);
        LOGGER.info("Database updated and {} row(s) got effected on schedule 1", rows);
    }
}

Способ, которым я тестирую, использует часть LoadTest в пользовательском интерфейсе SOAP со следующей конфигурацией: Threads:100 Strategy: Simple, Test Delay 0, Random: 0.5 Limit: 60 seconds.

Но я все еще не могу вызвать это исключение, как я тестирую?

PS.Если я добавлю @Transactional к dbtest() методу, это исключение все еще будет существовать?

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