Java Spring Boot EntityManagerFactoryBuilder未自动连接
在Spring引导应用程序中,我尝试设置多个数据库连接。我已经开始构建主数据源,但是在mySqlEntityManagerFactory方法上出现以下错误 无法自动连线。没有EntityManagerFactoryBuilder的beanJava Spring Boot EntityManagerFactoryBuilder未自动连接,java,spring,spring-boot,Java,Spring,Spring Boot,在Spring引导应用程序中,我尝试设置多个数据库连接。我已经开始构建主数据源,但是在mySqlEntityManagerFactory方法上出现以下错误 无法自动连线。没有EntityManagerFactoryBuilder的bean import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.Configura
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
@Transactional
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "digital.sheppard.dao",
entityManagerFactoryRef = "entityManager",
transactionManagerRef = "transactionManager")
public class PrimaryDBConfig {
@Bean(name="dataSource")
@Primary
@ConfigurationProperties(prefix = "primary.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "primary")
@Primary
@Bean(name = "entityManager")
public LocalContainerEntityManagerFactoryBean mySqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(mysqlDataSource()).persistenceUnit("primary").properties(jpaProperties())
.packages("digital.sheppard.model").build();
}
private Map<String, Object> jpaProperties() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("hibernte.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
props.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return props;
}
}
这是由ide软件引起的,请设置这些选项
您是否尝试删除对“数据源自动配置”的排除 使用“@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})”可以防止创建大量bean 如果您在使用数据源时遇到问题,并且添加此数据源是您的解决方案,那么它可能不是正确的解决方案 要知道spring boot检测到类路径中存在某些类。 如果您使用的是maven,那么它将从所有依赖项读取所有类 所以让这个DataSourceAutoConfiguration.class跑吧;
干杯我认为您应该删除此代码
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
可能是,请注意,您的主类不在“类树”的顶部。Spring需要扫描从主类开始的所有子类(根据包约定) 也许你会读书 如果您的类没有被spring scan读取,它们将永远不会进入spring上下文 两种可能性:
您需要将@EnableJpaRepositories(basePackages={“your.pkg.here”})添加到应用程序中。这告诉Spring数据在指定的包下查找存储库类 此异常是由于
public LocalContainerEntityManagerFactoryBean mySqlEntityManagerFactory(entitymanagerfactorbuilder){
它需要一个beanEntityManagerFactoryBuilder
我检查了参考链接,我不确定该代码是否有效
通常,创建LocalContainerEntityManagerFactoryBean的实例并根据需要对其进行初始化
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(mysqlDataSource());
em.setPersistenceUnitName("primary");
em.setPackagesToScan(new String[] { "digital.sheppard.model" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(jpaProperties());
持久化单元名称应该与persistence.xml
中定义的名称相同,尽管该文件现在在使用SpringJPA时是可选的
对于非spring版本,请查看
也
- 由于您自己正在初始化EntityManagerFactory,因此我们必须排除
DataSourceAutoConfiguration.class
如果您需要多个数据源,只需使用LI> <代码> @ <代码> >,请考虑删除注释,并在需要多个数据源时添加它。
builder
更改为entityManagerFactoryBuilder
以注入JpaBaseConfiguration.class中存在的bean。对于我来说,删除多个数据源上错误添加的@Primary修复了问题是否禁用了任何与Hibernate相关的自动配置类(如hibernatejpaaautoconfiguration.class)?Yes@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})在主应用程序类中。我用这个更新了问题code@Sheppard我遇到了同样的问题。找到了这个问题的解决方案吗?你能启动后日志堆栈吗?有人有解决方案吗?设置-->检查-->Spring-->警告对我不起作用。将@Primary添加到两种配置之一为我修复了这个错误。尽管我已经读过了主项目不应该是必需的。这里也是一样,添加@Primary
修复了它。这似乎不正确。我将看看是否可以将它缩小为一个小的可复制项目,并将其作为一个bug报告给Spring项目。
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(mysqlDataSource());
em.setPersistenceUnitName("primary");
em.setPackagesToScan(new String[] { "digital.sheppard.model" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(jpaProperties());