J'utilise un Spring Boot (1.4.7) et MyBatis.
spring.main1.datasource.url=jdbc:mariadb://192.168.0.11:3306/testdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&socketTimeout=5000&connectTimeout=3000
spring.main1.datasource.username=username
spring.main1.datasource.password=password
spring.main1.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.main1.datasource.Tomcat.test-on-borrow=true
spring.main1.datasource.Tomcat.test-while-idle=true
spring.main1.datasource.Tomcat.validation-query=SELECT 1
spring.main1.datasource.Tomcat.validation-query-timeout=5000
spring.main1.datasource.Tomcat.validation-interval=5000
spring.main1.datasource.Tomcat.max-wait=5000
spring.main1.datasource.continue-on-error=true
Je ne peux pas démarrer le programme avec des erreurs lorsque la base de données est déconnectée sur le serveur Eclipse ou Linux. (La base de données ne se trouve pas sur localhost.)
Lorsque j'essaie de démarrer le programme avec une base de données déconnectée, imprimez ceci.
Java.sql.SQLNonTransientConnectionException: Could not connect to address=(Host=192.168.0.11)(port=3306)(type=master) : connect timed out
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is Java.sql.SQLNonTransientConnectionException: Could not connect to address=(Host=192.168.0.11)(port=3306)(type=master) : connect timed out
Stopping service [Tomcat]
Application startup failed
Y a-t-il un moyen?
Merci
Vous pouvez définir:
spring.datasource.continue-on-error=true
dans votre application.properties.
Selon le Guide de l'utilisateur de Spring Boot 2.2.4 :
Par défaut, Spring Boot active la fonction de restauration rapide de l'initialiseur Spring JDBC. Cela signifie que si les scripts provoquent des exceptions, l'application ne démarre pas. Vous pouvez régler ce comportement en définissant spring.datasource.continue-on-error.
Vous devez ajouter
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
afin de le faire fonctionner
J'ai pu résoudre ce problème. Cependant, une différence principale entre ce que j'ai fait fonctionner et le code de la question est que j'utilise Hikari au lieu de Tomcat pour le pool de connexions.
Ce sont les paramètres clés que j'ai dû faire:
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
Réglage minimum-idle
à 0 permet à Hikari d'être heureux sans aucune connexion.
Le initialization-fail-timeout
le paramètre -1 indique à Hikari que je ne veux pas qu'il obtienne une connexion lorsque le pool se déclenche.
De la documentation HikariCP :
Une valeur inférieure à zéro contournera toute tentative de connexion initiale et le pool démarrera immédiatement tout en essayant d'obtenir des connexions en arrière-plan. Par conséquent, les efforts ultérieurs pour obtenir une connexion peuvent échouer.
Le continue-on-error
setting true
permet au service de continuer même en cas d'erreur.
Les driver-class-name
et database-platform
étaient requis. Sinon, Hikari essaie de comprendre ces valeurs en se connectant à la base de données (au démarrage).
Au cas où je manquerais quelque chose, voici ma configuration complète de Spring:
spring:
application:
name: <redacted>
datasource:
url: <redacted>
username: <redacted>
password: <redacted>
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
Et mon projet a les dépendances Spring Boot suivantes:
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