Pregunta Configuración básica de Spring Boot JPA tomando prioridad sobre la configuración de la aplicación


Contexto: Uso de Spring Boot 0.5.0-M7, MySQL y Commons DBCP, configuración de Java, @EnableAutoConfiguration conjunto.

Definí la aplicación DataSource frijol, JpaVendorAdapter frijol, LocalContainerEntityManagerFactoryBean y TransactionManager frijoles con configuración específica para admitir DBCP y algunas configuraciones de Hibernate. En el inicio de la aplicación, el DataSource definitivamente se está respetando (la depuración confirma), pero los otros beans se ignoran. Esto parece ser como resultado de la JpaBaseConfiguration clase, que es traído a la mezcla por el WebMvcConfiguration y uno de sus filtros de seguridad. En cualquier caso, entre otras cosas, el problema es que la configuración de Hibernate establece hbm2ddl (Exportación de esquemas) para drop-create, por lo que pierdo mis datos cada vez que el servidor se reinicia.

Miré a través de la fuente y encontré que parece que hay posibilidades de establecer variables de entorno que se respetarán en el JpaBaseConfiguration, sin embargo, eso parece frustrar la configuración de beans para hacer el mismo trabajo. Intenté excluir algunas clases de autoconfiguración relacionadas con los datos en vano. ¿Existe alguna otra expectativa para configurar una configuración de datos no predeterminada que pueda faltar?


5
2018-01-21 06:20


origen


Respuestas:


Mirando el código para Spring Boot 0.5.0.M7 cuando se detecta hibernación (HibernateEntityManager) y Springs LocalContainerEntityManagerFactoryBean hibernate siempre se configurará por defecto. Puede anular ciertas propiedades poniéndolas en application.properties.

spring.jpa.hibernate.naming-strategy - Establecerá la estrategia de nombres utilizada por defecto = ImprovedNamingStrategy. spring.jpa.hibernate.ddl-auto - configurará hibernate.hbm2ddl.auto default = create-drop.

Propiedades generales de JPA que puede configurar

  1. spring.jpa.show-sql - Mostrar sql en los registros
  2. spring.jpa.database-platform - Para hibernar este es el dialecto.
  3. spring.jpa.database - La base de datos utilizada (¡no la use junto con la plataforma de la base de datos!).
  4. spring.jpa.generate-ddl - si se genera el ddl, el valor predeterminado es falso (anulado por el spring.jpa.hibernate.ddl-auto propiedad)

Si desea especificar algunas propiedades predeterminadas, prefijelas con spring.jpa.properties luego se agregarán a la jpaProperties del LocalContainterEntityManagerFactoryBean.

La inclusión de la HibernateJpaAutoConfiguration no está relacionado con ninguna otra configuración, simplemente se desencadena por la detección de algunas clases

@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class,
    EnableTransactionManagement.class, EntityManager.class,
    HibernateEntityManager.class })
@ConditionalOnBean(DataSource.class)
@EnableTransactionManagement

9
2018-01-21 07:15



Gracias a @ dave-syer y @ m-deinum por sus entradas. Resulta que la compilación SNAPSHOT hizo el truco, M7 no estaba respetando mis propios frijoles, pero ahora las cosas funcionan como se esperaba. Para la posteridad extraje la esencia de lo que hice en mi aplicación y la apliqué a la muestra Boot JPA. La fuente se puede encontrar aquí. Dave, si crees que hay una forma aún más sencilla de hacerlo, por favor, házmelo saber.


0
2018-01-21 21:57