tutorial español desde conectar con cero application mysql spring jpa spring-boot hibernate-4.x

mysql - español - ¿Cómo iniciar la aplicación Spring-boot sin depender de la base de datos?



spring boot tutorial (4)

Agregar esto solo funcionó para mí:

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.Oracle10gDialect

Simplemente reemplace la última parte con su dialecto de base de datos.

Estoy usando "Spring-boot + Hibernate4 + mysql" para mi aplicación. Como parte de lo cual, tengo un requisito en el que mi aplicación sprint-boot debe poder iniciarse incluso cuando la base de datos no funcione. Actualmente da la siguiente excepción cuando trato de iniciar mi aplicación de arranque de primavera sin que DB esté activa.

Investigué mucho y descubrí que esta excepción tiene que ver con la propiedad hibernate.temp.use_jdbc_metadata_defaults .

Intenté configurar esto en "application.yml" del arranque de primavera, pero el valor de esta propiedad no se refleja en el tiempo de ejecución.

Rastreo de pila de excepciones:

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


Agregar la siguiente configuración debería ser trabajo:

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


De hecho, fue un hueso duro de roer.

Después de mucha y mucha investigación y de depurar en realidad el spring-boot, spring, hibernate, tomcat pool, etc. para hacerlo.

Creo que ahorrará mucho tiempo a las personas que intentan alcanzar este tipo de requisitos.

A continuación se detallan las configuraciones requeridas para lograr el siguiente requisito

  1. Las aplicaciones de inicio de Spring comenzarán bien incluso si DB está inactivo o no hay DB.
  2. Las aplicaciones recogerán las conexiones sobre la marcha a medida que aparece DB, lo que significa que no es necesario reiniciar el servidor web o volver a implementar las aplicaciones.
  3. No es necesario iniciar el tomcat o volver a implementar las aplicaciones, si el DB deja de funcionar y vuelve a aparecer.

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


Estoy respondiendo aquí y cerraré el problema que has publicado

Cualquier propiedad "nativa" de la implementación de JPA (Hibernate) puede configurarse usando el prefijo spring.jpa.properties como se explica aquí

No he buscado mucho más aquí, pero para responder a esta pregunta en particular, puede establecer esa clave de hibernación de la siguiente manera

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults