Saltar al contenido

¿Cómo hacer que el servidor Spring se inicie incluso si la base de datos está inactiva?

Hola, tenemos la solución a tu pregunta, has scroll y la encontrarás un poco más abajo.

Solución:

Puede configurar:

spring.datasource.continue-on-error=true

en su aplicación.propiedades.

Según la guía del usuario de Spring Boot 2.2.4:

De forma predeterminada, Spring Boot habilita la función de falla rápida del inicializador Spring JDBC. Esto significa que, si los scripts provocan excepciones, la aplicación no se inicia. Puede ajustar ese comportamiento configurando spring.datasource.continue-on-error.

Pude resolver esto. Sin embargo, una diferencia principal entre lo que hice funcionar y el código de la pregunta es que estoy usando Hikari en lugar de Tomcat para el conjunto de conexiones.

Estos fueron los key ajustes que tuve que hacer:

spring.datasource.hikari.minimum-idle: 0
spring.datasource.hikari.initialization-fail-timeout: -1
spring.datasource.continue-on-error: true
spring.datasource.driver-class-name: org.postgresql.Driver
spring.jpa.database-platform: org.hibernate.dialect.PostgreSQLDialect

Ajuste minimum-idle a 0 le permite a Hikari ser feliz sin ninguna conexión.

los initialization-fail-timeout la configuración de -1 le dice a Hikari que no quiero que se conecte cuando el grupo se enciende.

De la documentación de HikariCP:

Un valor inferior a cero omitirá cualquier intento de conexión inicial y el grupo se iniciará inmediatamente mientras intenta obtener conexiones en segundo plano. En consecuencia, los esfuerzos posteriores para obtener una conexión pueden fallar.

los continue-on-error ajuste true permite que el servicio continúe incluso cuando se produce un error.

Ambos driver-class-name y database-platform fueron requeridos. De lo contrario, Hikari intenta averiguar esos valores conectándose a la base de datos (durante el inicio).


Sin embargo, en caso de que me esté perdiendo algo, aquí está mi configuración completa de Spring:

spring:
  application:
    name: 
  datasource:
    url: 
    username: 
    password: 
    driver-class-name: org.postgresql.Driver
    hikari:
      minimum-idle: 0
      maximum-pool-size: 15
      connection-timeout: 10000 #10s
      idle-timeout: 300000 #5m
      max-lifetime: 600000 #10m
      initialization-fail-timeout: -1
      validation-timeout: 1000 #1s
    continue-on-error: true
  jpa:
    open-in-view: false
    database-platform: org.hibernate.dialect.PostgreSQLDialect

Y mi proyecto tiene las siguientes dependencias de Spring Boot:

org.springframework.boot:spring-boot
org.springframework.boot:spring-boot-actuator
org.springframework.boot:spring-boot-actuator-autoconfigure
org.springframework.boot:spring-boot-autoconfigure
org.springframework.boot:spring-boot-configuration-processor
org.springframework.boot:spring-boot-devtools
org.springframework.boot:spring-boot-starter
org.springframework.boot:spring-boot-starter-actuator
org.springframework.boot:spring-boot-starter-jdbc
org.springframework.boot:spring-boot-starter-jooq
org.springframework.boot:spring-boot-starter-json
org.springframework.boot:spring-boot-starter-logging
org.springframework.boot:spring-boot-starter-security
org.springframework.boot:spring-boot-starter-test
org.springframework.boot:spring-boot-starter-tomcat
org.springframework.boot:spring-boot-starter-validation
org.springframework.boot:spring-boot-starter-web

Necesitas agregar

spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

para que funcione

Reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *