You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringMVC jar包项目转Maven项目运行报BeanCreationException如何解决

报错诱因

该报错本质是Hibernate事务管理器尝试将持有的资源转换为javax.sql.DataSource类型时失败,改造为Maven后触发该问题的常见原因如下:

  • 依赖版本冲突:原手动管理的jar包版本统一,改造后Maven传递依赖引入了不兼容的Spring ORM、Hibernate核心包版本,或是同时引入了javax和jakarta两套同类型API包,导致类型不匹配
  • 配置错误:AppConfig中事务管理器的配置有误,未注入合法的DataSource实例,或是错误将SessionFactory作为事务管理器的唯一参数传入,导致Hibernate无法从传入资源中解析出DataSource
  • 依赖缺失:原项目带有的数据源实现包(如Druid、C3P0)、数据库驱动包未在pom.xml中声明,导致DataSource无法正常实例化,事务管理器拿到的是无效代理或空对象
  • 类加载冲突:Maven引入了多个同全类名的DataSource实现,导致类加载器拿到的类型和Hibernate要求的javax.sql.DataSource不属于同一类实例
排查步骤
  1. 检查事务管理器配置
    核对AppConfig中getTransactionManager的实现,确认是否正确传入了DataSource实例:

错误配置示例

@Bean
public PlatformTransactionManager getTransactionManager(SessionFactory sessionFactory) {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setSessionFactory(sessionFactory);
    return txManager;
}

正确配置参考

@Bean
public PlatformTransactionManager getTransactionManager(DataSource dataSource, SessionFactory sessionFactory) {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setDataSource(dataSource);
    txManager.setSessionFactory(sessionFactory);
    return txManager;
}
  1. 排查依赖冲突
    执行Maven命令mvn dependency:tree,检查是否同时存在javax.persistence-api和jakarta.persistence-api依赖,核对Spring、Hibernate的核心版本是否适配,比如Spring 5.3.x适配Hibernate 5.6.x,Spring 6.x默认使用Jakarta API需要对应Hibernate 6.x版本
  2. 验证DataSource实例化状态
    在DataSource的Bean配置中增加日志打印,确认返回的实例是合法的javax.sql.DataSource实现类,没有出现实例化失败或类型被代理篡改的问题
  3. 核对依赖完整性
    检查pom.xml中是否声明了数据源实现、数据库驱动的依赖,版本和原手动引入的jar包保持一致
解决方案
  • 处理依赖冲突:通过<dependencyManagement>标签统一锁定Spring、Hibernate全系列依赖版本,排除不需要的Jakarta相关传递依赖:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>5.3.20</version>
    <exclusions>
        <exclusion>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 修正配置问题:调整事务管理器配置,主动注入正常实例化的DataSource,不要依赖Hibernate从SessionFactory中自动解析DataSource,规避版本适配问题
  • 补全缺失依赖:在pom.xml中添加原项目使用的数据源实现、数据库驱动依赖,和原有版本保持一致
  • 解决类加载冲突:统一锁定所有javax.sql相关包的版本,排除多余的传递依赖引入的重复类

内容的提问来源于stack exchange,提问作者Neha Kasar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:39:03