Spring Boot 3:禁用JPA保留JDBC,多数据源配置遇启动异常
彻底禁用Spring Boot JPA自动配置的可行方案
一、全量排除JPA相关自动配置类
只排除HibernateJpaAutoConfiguration不足以完全禁用JPA,因为Spring Boot的JPA自动配置由多个类协同控制。直接在启动类上排除核心的JPA自动配置类:
@SpringBootApplication(exclude = { JpaAutoConfiguration.class, // 核心JPA自动配置,包含EntityManagerFactory创建逻辑 JpaRepositoriesAutoConfiguration.class, // JPA仓库扫描的自动配置类 HibernateJpaAutoConfiguration.class // Hibernate相关的JPA实现配置 }) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
注:如果你需要保留Spring Boot对DataSource的自动配置(你是手动配置的两个DataSource,也可以保留),不要排除DataSourceAutoConfiguration.class,否则可能影响手动配置的DataSource初始化。
二、单独禁用JPA仓库扫描
如果不想全量排除自动配置,仅需关闭JPA仓库扫描,可以在启动类上指定空的扫描路径:
@SpringBootApplication @EnableJpaRepositories(basePackages = "") // 空路径会跳过所有仓库扫描 public class YourApplication { // ... }
三、从依赖层面移除JPA相关包
如果项目完全不需要JPA功能,直接在pom.xml(Maven)或build.gradle(Gradle)中移除JPA相关依赖:
- Maven:移除
spring-boot-starter-data-jpa依赖
<!-- 移除这个依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
- Gradle:移除对应的依赖项
// 移除这个依赖 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
这种方式从根源上避免JPA自动配置被触发,是最彻底的方案。
验证生效
启动应用后,查看日志:
- 不再出现
EntityManagerFactory初始化相关的日志 - 无
Failed to find 'entityManagerFactory' bean错误 - 手动配置的两个
JdbcTemplate仍能正常操作数据库
内容的提问来源于stack exchange,提问作者Quinteger
相关产品推荐
相关产品推荐

