Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot EntityManagerFactoryBuilder未自动连接_Java_Spring_Spring Boot - Fatal编程技术网

Java Spring Boot EntityManagerFactoryBuilder未自动连接

Java 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

在Spring引导应用程序中,我尝试设置多个数据库连接。我已经开始构建主数据源,但是在mySqlEntityManagerFactory方法上出现以下错误

无法自动连线。没有EntityManagerFactoryBuilder的bean

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){
它需要一个bean
EntityManagerFactoryBuilder

我检查了参考链接,我不确定该代码是否有效

通常,创建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());