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
相关产品推荐
相关产品推荐

