Java 在aws上部署Spring引导应用程序时,无法创建内部beanof类型org.springframework.orm.jpa.SharedEntityManagerCreator错误

Java 在aws上部署Spring引导应用程序时,无法创建内部beanof类型org.springframework.orm.jpa.SharedEntityManagerCreator错误,java,spring,spring-boot,hibernate,Java,Spring,Spring Boot,Hibernate,我已经在AWS EC2上部署了多租户Spring引导应用程序。该代码在本地系统中运行良好,但在docker在aws ec2中运行后,应用程序出现以下错误 ]ConfigServletWebServerApplicationContext:在上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建URL中定义的名为“orderReportListener”的bean时出错[jar:

我已经在AWS EC2上部署了多租户Spring引导应用程序。该代码在本地系统中运行良好,但在docker在aws ec2中运行后,应用程序出现以下错误

]ConfigServletWebServerApplicationContext:在上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建URL中定义的名为“orderReportListener”的bean时出错[jar:file:/app service.jar!/BOOT-INF/classes!/com/aic/autofluence/appservice/scheduler/kafkaReportListener/OrderReportListener.class]:通过构造函数参数1表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedDependencyException:创建URL中定义的名为“reportFactoryImplData”的bean时出错[jar:file:/app service.jar!/BOOT-INF/classes!/com/aic/autofluence/appservice/scheduler/service/Impl/reportfactorympldata.class]:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“orderReportRepository”的bean时出错,该bean在com.aic.autofluence.appservice.scheduler.repository.orderReportRepository中定义,该bean在TenantDatabaseConfi上声明的@EnableJpaRepositories中定义g:在设置bean属性“entityManager”时,无法创建[org.springframework.orm.jpa.SharedentialManagerCreator]类型的内部bean'(内部bean)3593e066';嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为(内部bean)的bean时出错#4293e066':设置构造函数参数时无法解析对bean“entityManagerFactory”的引用;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为“entityManagerFactory”的bean可用
2021-05-10 18:58:57.081信息1---[main]j.LocalContainerEntityManagerFactoryBean:关闭持久性单元“masterdb持久性单元”的JPA EntityManagerFactory
2021-05-10 18:58:57.082信息1---[main]com.zaxxer.hikari.HikariDataSource:masterdb连接池-已启动关机。。。
2021-05-10 18:58:57.099信息1---[main]com.zaxxer.hikari.HikariDataSource:masterdb连接池-关闭完成。
2021-05-10 18:58:57.103信息1---[main]o.apache.catalina.core.StandardService:停止服务[Tomcat]
2021-05-10 18:58:57.124信息1---[main]条件评估报告日志监听器:
启动ApplicationContext时出错。若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。
2021-05-10 18:58:57.147错误1---[main]o.s.b.d.记录失败分析报告者:
***************************
应用程序无法启动
***************************
说明:
com.aic.autofluence.appservice.scheduler.service.Impl.ReportFactoryImplData中构造函数的参数0需要名为“entityManagerFactory”的bean,但找不到该bean。
我的示例代码如下所示:

租户配置:未识别EntityManagerFactory bean本身。它在本地系统中运行良好,在vm中运行失败

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "x.x.x.x.scheduler.repository", "x.x.x.x.scheduler.model" })
@EnableJpaRepositories(basePackages = {"x.x.x.x..scheduler.repository", "x.x.x.x..scheduler.service"},
        entityManagerFactoryRef = "tenantEntityManagerFactory",
        transactionManagerRef = "tenantTransactionManager")
public class TenantDatabaseConfig {

   @Bean(name = "tenantJpaVendorAdapter")
    public JpaVendorAdapter jpaVendorAdapter() {
        return new HibernateJpaVendorAdapter ();
    }

    @Bean(name = "tenantTransactionManager")
    public JpaTransactionManager transactionManager(@Qualifier("tenantEntityManagerFactory") EntityManagerFactory tenantEntityManager) {
        JpaTransactionManager transactionManager = new JpaTransactionManager ();
        transactionManager.setEntityManagerFactory(tenantEntityManager);
        return transactionManager;
    }
    
    @Bean(name = "datasourceBasedMultitenantConnectionProvider")
    @ConditionalOnBean(name = "masterEntityManagerFactory")
    public MultiTenantConnectionProvider multiTenantConnectionProvider() {
        return new DataSourceBasedMultiTenantConnectionProviderImpl();
    }

    @Bean(name = "currentTenantIdentifierResolver")
    public CurrentTenantIdentifierResolver currentTenantIdentifierResolver() {
        return new CurrentTenantIdentifierResolverImpl();
    }

    
    @Bean(name = "tenantEntityManagerFactory")
    @ConditionalOnBean(name = "datasourceBasedMultitenantConnectionProvider")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            @Qualifier("datasourceBasedMultitenantConnectionProvider")
                    MultiTenantConnectionProvider connectionProvider,
            @Qualifier("currentTenantIdentifierResolver")
                    CurrentTenantIdentifierResolver tenantResolver) {
        LocalContainerEntityManagerFactoryBean emfBean = new LocalContainerEntityManagerFactoryBean ();
        //All tenant related entities, repositories and service classes must be scanned
        emfBean.setPackagesToScan("com.aic.autofluence.appservice");
        emfBean.setJpaVendorAdapter(jpaVendorAdapter());
        emfBean.setPersistenceUnitName("tenantdb-persistence-unit");
        Map<String, Object> properties = new HashMap<>();
        properties.put( Environment.MULTI_TENANT, MultiTenancyStrategy.DATABASE);
        properties.put( Environment.MULTI_TENANT_CONNECTION_PROVIDER, connectionProvider);
        properties.put( Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, tenantResolver);
        properties.put( Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
        properties.put( Environment.SHOW_SQL, true);
        properties.put( Environment.FORMAT_SQL, true);
        properties.put( Environment.HBM2DDL_AUTO, "none");
        emfBean.setJpaPropertyMap(properties);
        return emfBean;
    }
}


**MasterConfig: It is configured properly working fine**

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"x.x.x.x.mastertenant.model",
        "x.x.x.x.mastertenant.repository"
},
        entityManagerFactoryRef = "masterEntityManagerFactory",
        transactionManagerRef = "masterTransactionManager")
public class MasterDatabaseConfig {

    private static final Logger LOG = LoggerFactory.getLogger(MasterDatabaseConfig.class);

    @Autowired
    private MasterDatabaseConfigProperties masterDbProperties;

    @Bean(name = "masterDataSource")
    public DataSource masterDataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource ();
        hikariDataSource.setUsername(masterDbProperties.getUsername());
        hikariDataSource.setPassword(masterDbProperties.getPassword());
        hikariDataSource.setJdbcUrl(masterDbProperties.getUrl());
        hikariDataSource.setDriverClassName(masterDbProperties.getDriverClassName());
        hikariDataSource.setPoolName(masterDbProperties.getPoolName());
        // HikariCP settings
        hikariDataSource.setMaximumPoolSize(masterDbProperties.getMaxPoolSize());
        hikariDataSource.setMinimumIdle(masterDbProperties.getMinIdle());
        hikariDataSource.setConnectionTimeout(masterDbProperties.getConnectionTimeout());
        hikariDataSource.setIdleTimeout(masterDbProperties.getIdleTimeout());
        LOG.info("Setup of masterDataSource succeeded.");
        return hikariDataSource;
    }

    @Primary
    @Bean(name = "masterEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean masterEntityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean ();
        em.setDataSource(masterDataSource());
        em.setPackagesToScan(new String[]{x,x,x,x...});
        em.setPersistenceUnitName("masterdb-persistence-unit");
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter ();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(hibernateProperties());
        LOG.info("Setup of masterEntityManagerFactory succeeded.");
        return em;
    }

    @Bean(name = "masterTransactionManager")
    public JpaTransactionManager masterTransactionManager(@Qualifier("masterEntityManagerFactory") EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager ();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor ();
    }


    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put(org.hibernate.cfg.Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
        properties.put(org.hibernate.cfg.Environment.SHOW_SQL, true);
        properties.put(org.hibernate.cfg.Environment.FORMAT_SQL, true);
        properties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "none");
        return properties;
    }
@配置
@启用事务管理
@ComponentScan(basePackages={“x.x.x.x.scheduler.repository”,“x.x.x.x.scheduler.model”})
@EnableJpaRepositories(basePackages={“x.x.x.x..scheduler.repository”,“x.x.x.x..scheduler.service”},
entityManagerFactoryRef=“租户管理工厂”,
transactionManagerRef=“租户交易经理”)
公共类租户DatabaseConfig{
@Bean(name=“tenantJpaVendorAdapter”)
公共JpaVendorAdapter JpaVendorAdapter(){
返回新的HibernateJavaEndorapter();
}
@Bean(name=“tenantTransactionManager”)
公共JpaTransactionManager事务管理器(@Qualifier(“租户管理工厂”)EntityManager工厂租户管理者){
JpaTransactionManager transactionManager=新的JpaTransactionManager();
transactionManager.SetEntityManager工厂(租户管理者);
返回事务管理器;
}
@Bean(name=“datasourceBasedMultitenantConnectionProvider”)
@ConditionalOnBean(name=“masterEntityManagerFactory”)
公共多租户连接提供程序多租户连接提供程序(){
返回新的DataSourceBasedMultiTenantConnectionProviderImpl();
}
@Bean(name=“currentTenantIdentifierResolver”)
public CurrentTenantIdentifierResolver CurrentTenantIdentifierResolver(){
返回新的CurrentTenantIdentifierResolverImpl();
}
@Bean(name=“租户管理工厂”)
@ConditionalOnBean(name=“datasourceBasedMultitenantConnectionProvider”)
公共LocalContainerEntityManagerFactoryBean entityManagerFactory(
@限定符(“datasourceBasedMultitenantConnectionProvider”)
多租户连接提供程序connectionProvider,
@限定符(“currentTenantIdentifierResolver”)
CurrentTenantIdentifier解析程序tenantResolver){
LocalContainerEntityManagerFactoryBean emfBean=新的LocalContainerEntityManagerFactoryBean();
//必须扫描所有与租户相关的实体、存储库和服务类
emfBean.setPackagesToScan(“com.aic.autofluence.appservice”);
setJpaVendorAdapter(jpaVendorAdapter());
emfBean.setPersistenceUnitName(“租户数据库持久化单元”);
映射属性=新的HashMap();
properties.put(Environment.MULTI_-TENANT,MULTI-tenancystategy.DATABASE);
properties.put(Environment.MULTI_-TENANT_-CONNECTION_-PROVIDER,connectionProvider);
properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER,tenantResolver);
properties.put(Environment.dialogue,“org.hibernate.dialogue.mysql5dialogue”);
properties.put(Environment.SHO)
Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

Parameter 0 of constructor in com.aic.autofluence.appservice.scheduler.service.Impl.ReportFactoryImplData required a bean named 'entityManagerFactory' that could not be found.