[SPRING] 데이터베이스에 의존하지 않고 스프링 - 부트 응용 프로그램을 시작하는 방법은 무엇입니까?
SPRING데이터베이스에 의존하지 않고 스프링 - 부트 응용 프로그램을 시작하는 방법은 무엇입니까?
내 응용 프로그램에 "Spring-boot + Hibernate4 + mysql"을 사용하고 있습니다. 그 중 일부는 데이터베이스가 다운 된 경우에도 sprint-boot 앱을 시작할 수 있어야한다는 요구 사항이 있습니다. 현재 DB를 사용하지 않고 스프링 부트 응용 프로그램을 시작하려고 할 때 예외가 있습니다.
나는 많은 것을 연구했고이 예외가 hibernate.temp.use_jdbc_metadata_defaults 속성과 관련이 있다는 것을 알았다.
나는 봄 부팅의 "application.yml"에서 이것을 설정하려고 시도했지만이 속성의 값은 런타임에 반영되지 않습니다.
예외 스택 추적 :
2014-05-25 04:09:43.193 INFO 59755 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
2014-05-25 04:09:43.250 WARN 59755 --- [ main] o.h.e.jdbc.internal.JdbcServicesImpl : HHH000342: Could not obtain connection to query metadata : Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2014-05-25 04:09:43.263 INFO 59755 --- [ main] o.apache.catalina.core.StandardService : Stopping service Tomcat
Error starting ApplicationContext. To display the auto-configuration report enabled debug logging (start with --debug)
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:648)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:909)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:898)
at admin.Application.main(Application.java:36)
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 15 more
application.yml :
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: none
naming_strategy: org.hibernate.cfg.DefaultNamingStrategy
temp:
use_jdbc_metadata_defaults: false
해결법
-
==============================
1.참으로 깨지기 힘든 견과였습니다.
참으로 깨지기 힘든 견과였습니다.
많은 연구와 실제로 spring-boot, spring, hibernate, tomcat pool 등을 디버깅 한 후 끝내야합니다.
나는 사람들이 이런 유형의 요구 사항을 성취하려고 많은 시간을 절약 할 것이라고 생각한다.
다음 요구 사항을 충족하는 데 필요한 설정은 다음과 같습니다.
application.yml :
spring: datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/schema username: root password: root continueOnError: true initialize: false initialSize: 0 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 5000 minIdle: 0 jpa: show-sql: true hibernate: ddl-auto: none naming_strategy: org.hibernate.cfg.DefaultNamingStrategy properties: hibernate: dialect: org.hibernate.dialect.MySQL5Dialect hbm2ddl: auto: none temp: use_jdbc_metadata_defaults: false
-
==============================
2.나는 여기에 응답하고 당신이 교차 게시 한 문제를 닫을 것이다.
나는 여기에 응답하고 당신이 교차 게시 한 문제를 닫을 것이다.
JPA 구현 (Hibernate)의 "native"속성은 여기에 설명 된 spring.jpa.properties 접두사를 사용하여 설정할 수 있습니다
나는 실제 문제에서 더 많이 다루지는 않았지만이 질문에 답하기 위해 다음과 같이 동면 키를 설정할 수있다.
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults
-
==============================
3.이것을 추가하는 것만으로도 효과가있었습니다.
이것을 추가하는 것만으로도 효과가있었습니다.
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.Oracle10gDialect
마지막 부분을 데이터베이스 방언으로 바꾸십시오.
-
==============================
4.다음 설정을 추가해야 작동합니다.
다음 설정을 추가해야 작동합니다.
spring.jpa.database-platform : org.hibernate.dialect.MySQL5Dialect
from https://stackoverflow.com/questions/23850585/how-to-start-spring-boot-app-without-depending-on-database by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Transactional 어노테이션없이 다른 메소드를 호출하는 트랜잭션 메소드? (0) | 2018.12.22 |
---|---|
[SPRING] Spring에서 현재 ApplicationContext 가져 오기 (0) | 2018.12.22 |
[SPRING] 스프링 부트 : 뚱뚱한 항아리가있는 임의의 디렉토리에서 외부 application.properties 파일을 사용할 수 있습니까? (0) | 2018.12.22 |
[SPRING] Thymeleaf를 사용하여 Spring 모델에서 javascript 변수 설정하기 (0) | 2018.12.22 |
[SPRING] 테스트 용 임베디드 H2 데이터베이스 용 스프링 구성 (0) | 2018.12.22 |