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

Tomcat运行非Spring Boot的Spring Maven项目创建activityController Bean失败

根因分析

你在项目中引入了Spring Data JPA并自定义了继承JpaRepository的ActivityDAO接口,但Spring配置类未开启Spring Data JPA的仓库扫描能力,框架无法自动识别并创建ActivityDAO的实现类Bean,因此触发依赖注入失败报错。另外还存在版本不兼容、JPA实体扫描缺失的潜在问题。

解决步骤

1. 修正AppConfig配置类

在AppConfig上添加两个注解:

  • @EnableJpaRepositories:指定Repository接口所在包,开启Spring Data JPA仓库自动实现能力
  • @EntityScan:指定JPA实体类所在包,让框架识别所有@Entity标注的实体类

修正后的AppConfig代码如下:

package com.calendar.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "com.calendar")
@EnableJpaRepositories(basePackages = "com.calendar.repository")
@EntityScan(basePackages = "com.calendar.entity")
public class AppConfig implements WebMvcConfigurer {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean(name = "Calendar_PU")
    public LocalEntityManagerFactoryBean getEntityManagerFactoryBean() {
        LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
        factoryBean.setPersistenceUnitName("Calendar_PU");
        return factoryBean;
    }
}

2. 检查persistence.xml配置

确认你在src/main/resources/META-INF路径下存在persistence.xml文件,且文件中持久化单元的名称和你配置的Calendar_PU一致,示例配置参考:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="Calendar_PU" transaction-type="RESOURCE_LOCAL">
        <class>com.calendar.entity.Activity</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
            <property name="hibernate.connection.url" value="你的数据库连接地址"/>
            <property name="hibernate.connection.username" value="数据库用户名"/>
            <property name="hibernate.connection.password" value="数据库密码"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

3. 修复版本兼容问题

你当前使用的Spring 5.1.4.RELEASE和Spring Data JPA 2.4.7版本不兼容,Spring Data JPA 2.4.x要求Spring框架版本最低为5.3.x,两种修复方案二选一:

  • 方案1:将pom.xml中所有springframework.version升级到5.3.20
  • 方案2:将pom.xml中spring-data-jpa的版本降到2.1.21.RELEASE

完成以上三步后重新打包部署即可解决问题。

内容的提问来源于stack exchange,提问作者Francesco Morganti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:09:02