데이터베이스가 다운된 경우에도 Spring 서버를 부팅하려면 어떻게 해야 합니까?
스프링 부츠(1.4.7)와 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
Eclipse 또는 Linux 서버에서 데이터베이스 연결이 끊어진 경우 오류가 발생하여 프로그램을 시작할 수 없습니다(데이터베이스는 localhost에 없습니다).
연결이 끊긴 데이터베이스로 프로그램을 시작하려고 하면, 이것을 인쇄해 주세요.
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
무슨 방법이 없을까요?
감사해요.
설정할 수 있는 것은 다음과 같습니다.
spring.sql.init.continue-on-error=true
application.properties로 이동합니다.
Spring Boot 2.5.5 사용자 가이드에 따르면:
기본적으로는 Spring Boot을 사용하면 스크립트 기반 데이터베이스 이니셜라이저의 Fail-Fast 기능이 활성화됩니다.즉, 스크립트로 인해 예외가 발생하면 응용 프로그램이 시작되지 않습니다.이 동작은, 다음의 설정에 의해서 조정할 수 있습니다.
spring.sql.init.continue-on-error
.
추신: Spring Boot 2.5 이전부터 이 속성은spring.datasource.continue-on-error
.
나는 이것을 해결할 수 있었다.다만, 작업 내용과 질문의 코드의 큰 차이는, 접속 풀에 Tomcat 대신 Hikari를 사용하고 있다는 것입니다.
주요 설정은 다음과 같습니다.
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
설정minimum-idle
0까지를 지정하면 히카리는 아무런 연결 없이 행복해질 수 있습니다.
그initialization-fail-timeout
설정 -1은 Hikari에게 수영장에서 불이 났을 때 연결이 되지 않았으면 좋겠다고 말합니다.
값이 0보다 작으면 초기 연결 시도가 모두 바이패스되며 백그라운드에서 연결을 시도하는 동안 풀이 즉시 시작됩니다.그 결과, 나중에 접속을 얻기 위한 노력은 실패할 수 있습니다.
그continue-on-error
설정true
에러 발생시에도 서비스를 계속할 수 있습니다.
둘 다driver-class-name
그리고.database-platform
필수입니다.그렇지 않은 경우 Hikari는 (시작 시) 데이터베이스에 연결하여 이러한 값을 확인하려고 합니다.
단, 부족한 점이 있을 경우를 대비해서 전체 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
또한 프로젝트에는 다음과 같은 스프링 부트 의존 관계가 있습니다.
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
를 추가해야 합니다.
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
그것을 실현하기 위해서
위의 힌트가 도움이 되지 않고 jpa를 사용하는 경우,
spring.jpa.hibernate.ddl-auto=none
그것은 나에게 효과가 있었다.
앱을 만들 때 추가할 수 있습니다.
mvn clean install -DskipTests
데이터베이스 연결 테스트를 건너뜁니다.
(-D는 시스템속성을 정의하기 위해 사용됩니다.
언급URL : https://stackoverflow.com/questions/45409196/how-to-make-spring-server-to-start-even-if-database-is-down
'programing' 카테고리의 다른 글
잭슨과의 JSON 역직렬화 커스텀 (0) | 2023.03.29 |
---|---|
Woocommerce 숍 페이지 커스텀템플릿 (0) | 2023.03.29 |
스프링 부트엔티티 클래스에 옵션 전달 방법 <> (0) | 2023.03.29 |
리액션이 포함된 쿠키 가져오기 (0) | 2023.03.29 |
Wordpress 프로젝트 옆에 있는 Laravel 프로젝트(public_html 폴더에 있음) (0) | 2023.03.29 |