Hikari соединение недоступно - PullRequest
0 голосов
/ 10 марта 2020

Я столкнулся с проблемой, когда служба Spring Boot, после запуска в течение примерно одного дня с некоторой нагрузкой, внезапно не смогла создать соединение.

Я использовал стандартный стартер проекта Spring Boot 2. Создан контроллер покоя, модель, служба и хранилище.

@Entity
@Table(name = "partners")
public class Partner {

    /** Unique identifier. */
    @Id
    @JsonProperty("id")
    private long id;

    /** Partner name. */
    @JsonProperty("name")
    private String name;

    /**
     * Default constructor. Not usable publicly.
     */
    protected Partner() {
    }

    // etc...
}

Репо

/**
 * Partner repo.
 */
public interface PartnerRepository extends CrudRepository<Partner, Long> {
}

Служба

@Service
public class PartnersService {

    /** Access to Partner repo. */
    @Autowired
    private PartnerRepository partnerRepo;

    /**
     * Get partner data.
     *
     * @param id Partner identifier.
     * @return Partner instance, or null if not found.
     */
    public Partner getPartner(final long id) throws ServiceException {
        if (id <= 0) {
            throw new ServiceException("Please enter a valid partner identifier.");
        }
        final Optional<Partner> partner = partnerRepo.findById(id);
        return partner.orElse(null);
    }
}

Контроллер

@RestController
public class PartnerController extends BaseController {

    /** Partners service. */
    @Autowired
    private PartnersService partnersService;

    @RequestMapping(value = "/partners/api/v1/partners/{id}", method = GET)
    public ResponseEntity<FilldResponse> getPartner(@PathVariable final long id) {
        final FilldResponse response = new FilldResponse();
        HttpStatus httpStatus = HttpStatus.OK;
        try {
            final Partner partner = partnersService.getPartner(id);
            if (partner != null) {
                response.setData(partner);
                response.setMessage("Partner retrieved successfully.");
            } else {
                response.setMessage("Partner not found.");
                response.setStatusCode(4000);
                response.setStatus(false);
                httpStatus = HttpStatus.NOT_FOUND;
            }
        } catch (Exception ex) {
            response.setStatus(false);
            response.setMessage(ex.getMessage());
            response.setStatusCode(4000);
            httpStatus = HttpStatus.BAD_REQUEST;
        }
        return new ResponseEntity<>(response, httpStatus);
    }
}

Все в значительной степени по умолчанию. Через некоторое время использования в производстве я получаю:

Mar 09 09:18:22 52.43.134.45-1 partners: 2020-03-09 16:18:22.449  WARN 1 --- [nio-8080-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08S01
Mar 09 09:18:22 52.43.134.45-1 partners: 2020-03-09 16:18:22.449 ERROR 1 --- [nio-8080-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper   : HikariPool-1 - Connection is not available, request timed out after 30000ms.

Это работает в AWS как docker изображение.

Существуют ли известные проблемы или конфигурации, которые не настроены из коробки, которые могут быть причиной этого?

...