Skip to content

Can't exclude repository with @DataJpaTest excludeFilters #23727

@abc12345678912345

Description

@abc12345678912345

I want to exclude the foo repository from my @DataJpaTest annotated test.

@RunWith(SpringRunner.class)
@DataJpaTest(excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com\\.sandbox\\.foo.repository\\..*"))
public class BarRepositoryTest {

    @Autowired
    private BarRepository repository;

    @Test
    public void test() {}

}

Somehow this isn't working and Spring Boot tries to autowire the custom implementation of the foo repository, which fails, because no qualifying Bean of type FooService could be found. I guess this makes sense, since FooService isn't JPA related and shouldn't be picked up by @DataJpaTest.

Foo repository custom implementation:

public class FooRepositoryImpl implements FooRepositoryCustom {

    @Autowired
    private FooService fooService;

}

Foo repository configuration:

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "fooEntityManagerFactory", transactionManagerRef = "fooTransactionManager", basePackages = "com.sandbox.foo")
public class FooDbConfig {
    @ConfigurationProperties(prefix = "foo.datasource")
    public HikariDataSource dataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "fooEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dataSource()).packages("com.sandbox.foo.entity").persistenceUnit("foo").build();
    }

    @Bean(name = "fooTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("fooEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

Bar repository configuration:

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "fooEntityManagerFactory", transactionManagerRef = "fooTransactionManager", basePackages = "com.sandbox.foo")
public class FooDbConfig {

    @ConfigurationProperties(prefix = "foo.datasource")
    public HikariDataSource dataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "fooEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dataSource()).packages("com.sandbox.foo.entity").persistenceUnit("foo").build();
    }

    @Bean(name = "fooTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("fooEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

Main application class:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Spring Boot Version: 2.0.6.RELEASE

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: invalidAn issue that we don't feel is valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions