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

Spring Boot 3多数据源配置:EntityManagerFactoryBuilder编译错误

Spring Boot 3 多数据源配置:EntityManagerFactoryBuilder.dataSource 编译错误修复

问题根源

Spring Boot 3 全面切换到 Jakarta EE 规范,原javax.sql.DataSource已被jakarta.sql.DataSource替代。若你的配置类中导入的是旧的javax包下的DataSource,EntityManagerFactoryBuilder的dataSource方法会因参数类型不匹配,抛出找不到方法的编译错误。

修复步骤

1. 修正 DataSource 导入包

将配置类中的DataSource导入替换为:

import jakarta.sql.DataSource;

彻底移除javax.sql.DataSource的导入。

2. 标准@Primary数据源配置示例

参考以下正确的配置代码,检查你的实现是否有语法错误:

import jakarta.sql.DataSource;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.beans.factory.annotation.Qualifier;

import javax.persistence.EntityManagerFactory;
import java.util.Map;

@Configuration
public class PrimaryDataSourceConfig {

    @Primary
    @Bean("qaDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.qa")
    public DataSource qaDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean("qaEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean qaEntityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("qaDataSource") DataSource qaDataSource,
            JpaProperties jpaProperties) {
        return builder
                .dataSource(qaDataSource)
                .packages("com.your.project.qa.entities") // 替换为你的实体类包路径
                .persistenceUnit("qaPersistenceUnit")
                .properties(jpaProperties.getProperties())
                .build();
    }

    @Primary
    @Bean("qaTransactionManager")
    public PlatformTransactionManager qaTransactionManager(
            @Qualifier("qaEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

3. 验证依赖与缓存

  • 确保spring-boot-starter-data-jpa依赖为Spring Boot 3.x版本(无需手动指定版本,父依赖已管理)
  • 执行mvn clean install(或Gradle的clean build)清理构建缓存,重启IDE后重新编译

4. 检查配置文件

确认application.properties中多数据源配置前缀正确,例如:

# 主数据源配置
spring.datasource.qa.url=jdbc:mysql://localhost:3306/qa_db
spring.datasource.qa.username=root
spring.datasource.qa.password=your_password
spring.datasource.qa.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:47