上下文:使用Spring Boot 0.5.0-M7,MySQL和Commons DBCP,Java config,@EnableAutoConfiguration
设置。
我已经定义了具有特定配置的应用程序的DataSource
bean,JpaVendorAdapter
bean,LocalContainerEntityManagerFactoryBean
和TransactionManager
bean,以支持DBCP和一些Hibernate设置。在应用程序启动时,DataSource
肯定受到尊重(调试确认),但其他bean被忽略。这似乎是JpaBaseConfiguration
类的结果,它由WebMvcConfiguration
和其中一个安全过滤器组合而成。在任何情况下,问题都在于Hibernate设置将hbm2ddl(模式导出)设置为drop-create
,这样每次服务器重新启动时都会丢失数据。
我仔细查看了源代码,发现似乎有可能设置环境变量,这些变量将在JpaBaseConfiguration
中得到尊重,但这似乎无法设置bean来完成同样的工作。我试图排除一些与数据相关的自动配置类无济于事。是否有其他期望设置我可能缺少的非默认数据配置?
答案 0 :(得分:9)
在检测到hibernate(HibernateEntityManager
)时,查看Spring Boot 0.5.0.M7的代码,并且默认情况下将始终配置spring LocalContainerEntityManagerFactoryBean
hibernate。您可以通过将它们放在application.properties中来覆盖某些属性。
spring.jpa.hibernate.naming-strategy
- 将设置使用的命名策略default = ImprovedNamingStrategy
。
spring.jpa.hibernate.ddl-auto
- 将设置hibernate.hbm2ddl.auto default = create-drop。
您可以设置的常规JPA属性
spring.jpa.show-sql
- 在日志中显示sql spring.jpa.database-platform
- 对于休眠,这是方言spring.jpa.database
- 使用的数据库(不要与数据库平台一起使用!)。spring.jpa.generate-ddl
- 如果生成ddl,则默认为false(由spring.jpa.hibernate.ddl-auto
属性覆盖)如果您想要设置一些默认属性,请将它们作为spring.jpa.properties
的前缀,然后将它们添加到jpaProperties
的{{1}}。
包含LocalContainterEntityManagerFactoryBean
与任何其他配置无关,只是由检测到的某些类触发
HibernateJpaAutoConfiguration
答案 1 :(得分:0)
感谢@ dave-syer和@ m-deinum的投入。事实证明,SNAPSHOT构建没有做到这一点,M7并不尊重我自己的Beans,但现在事情按预期工作了。对于后人,我提取了我在应用程序中所做的精髓,并将其应用于Boot JPA示例。可以找到来源here。戴夫,如果你认为有一个更简单的方法,请告诉我。