加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在测试Spring Boot Batch应用程序时配置EntityManagerFactor

发布时间:2020-12-15 01:30:09 所属栏目:大数据 来源:网络整理
导读:我有一个Spring Boot Batch应用程序,我正在编写集成测试.但是,我在运行测试时遇到以下关于EntityManagerFactoryBuilder bean的错误: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFact

我有一个Spring Boot Batch应用程序,我正在编写集成测试.但是,我在运行测试时遇到以下关于EntityManagerFactoryBuilder bean的错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'entityManagerFactory' defined in com.example.DatabaseConfig: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder]: : 
No qualifying bean of type [org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 
Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]

我的理解是Spring Boot在应用程序启动时提供了EntityManagerFactoryBuilder bean.如何在运行测试时提供EntityManagerFactoryBuilder?

这是我的测试代码:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {DatabaseConfig.class,BatchConfiguration.class})
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,StepScopeTestExecutionListener.class })

public class StepScopeTestExecutionListenerIntegrationTests {

    @Autowired
    private FlatFileItemReader

这是DatabaseConfig类:

@Configuration
@EnableJpaRepositories(basePackages={"com.example.repository"},entityManagerFactoryRef="testEntityManagerFactory",transactionManagerRef = "testTransactionManager")
public class DatabaseConfig {

    @Bean
    public LocalContainerEntityManagerFactoryBean testEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(dataSource())
                .packages("com.example.domain")
                .persistenceUnit("testLoad")
                .build();
    }

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

    @Bean
    public PlatformTransactionManager testTransactionManager(EntityManagerFactory testEntityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(testEntityManagerFactory);
        return transactionManager;
    }

}
最佳答案
当(集成)测试Spring Boot应用程序时,你应该做什么. @SpringApplicationConfiguration旨在获取您的应用程序类(具有@SpringBootApplication批注的应用程序类),因为它将被触发以执行与常规Spring Boot应用程序相同的自动配置.

您只包含2个配置类,因此不会进行自动配置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读