如何禁用spring boot HibernateJpaAutoConfiguration
Posted
技术标签:
【中文标题】如何禁用spring boot HibernateJpaAutoConfiguration【英文标题】:how to disable spring boot HibernateJpaAutoConfiguration 【发布时间】:2016-09-27 13:15:41 【问题描述】:我有一个依赖于项目 B 的 spring boot 项目 A。 项目 B 有一些 .hbm.xml 资源。 在项目 A 中更改休眠配置我添加 DatabaseConfiguration @Configuration 更改 sessionFactory
@Bean
public LocalSessionFactoryBean sessionFactory()
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMappingLocations("classpath*:hibernate/**/*.hbm.xml");
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
sessionFactoryBean.setHibernateProperties(hibernateProperties);
return sessionFactoryBean;
build.gradle 有这个依赖 HibernateJpaAutoConfiguration 运行
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
当我在 gradle bootRun 或 maven spring-boot:run 中运行应用程序时 应用程序启动并正常,但是当我在 java -jar 中运行时 我得到异常
caused by: 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.MappingException:
An association from the table core_organization_Structure refers to an unmapped class: org.roshan.framework.domain.security.User
我不知道为什么 HibernateJpaAutoConfiguration 启动??? 之后我将 Application.java 更改为喜欢这个以排除它但再次不起作用。当我将 hbm 复制到 projectA .project A 运行并确定(使用 java -jar)
@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class )
更新
经过搜索和测试,我发现了问题并解决了这个问题。问题的原因是在项目中使用了 hibernate-entitymanager 依赖项。spring 启动执行器检测到这个并自动配置实体管理器。删除这个依赖项后禁用 HibernateJpaAutoConfiguration 工作正确:D
【问题讨论】:
是什么让您认为您需要一个普通的SessionFactory
才能使用hbm.xml
文件?这些与实体经理一起工作得很好(通常也会被选中)。因此,不要使事情复杂化,只需使用 JPA。我觉得很奇怪你没有得到 bootRun 错误(虽然我想我知道为什么,因为它正确配置了 JPA 实体管理器并且你打包的 jar 由于无法读取你的 hbm 文件而失败)。
我有很多 hbm 无法迁移到 jpa。为什么 HibernateJpaAutoConfiguration exclude 不起作用?
请阅读。您拥有 HBM 文件这一事实并不意味着您不能使用 JPA。注释或 xml 都必须为您的实体映射,对于基于 Hibernate 的 JPA 提供程序,它可以同时使用两者。因此,只需使用 JPA,只需使用实体管理器,它将与 HBM 文件一起使用。
是的,我想知道你在说什么。我想使用 SessionFactory 并忽略 HibernateJpaAutoConfiguration?我该怎么做? .并且不知道为什么在““java - jar”应用程序中不感知 jar 依赖项中的 hbm ?? 但是当在项目中复制 hbm 时应用程序启动正常????
然后排除自动配置。但是为什么要使用会话工厂呢?通过EntityManager
,它给了你什么?
【参考方案1】:
在搜索和测试之后,我发现了问题,问题的原因是在项目中使用了 hibernate-entitymanager 依赖项。spring boot actuator 检测到这个并自动配置实体管理器。删除这个依赖项后禁用 HibernateJpaAutoConfiguration 工作正确:D
【讨论】:
删除了哪些依赖项? :)【参考方案2】:试试这个禁用数据源自动配置:
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
public class MyConfiguration
【讨论】:
以上是关于如何禁用spring boot HibernateJpaAutoConfiguration的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 2.0 指定 Hibernate 映射?
如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP
如何在 Spring-Boot 2 中禁用安全性? [复制]
grails 3(spring-boot) - 如何配置hibernate二级缓存