Spring boot @DataJpaTest исключить фильтр не работает - PullRequest
1 голос
/ 04 октября 2019

У меня есть этот тест:

    @RunWith(SpringRunner.class)
    @DataJpaTest(excludeFilters = @Filter(type = FilterType.REGEX,
                                    pattern = "io\\.rainrobot\\.adwisdom\\.repository\\.es\\..*"))
    public class AskTest {

, который не должен сканировать репозитории в этом пакете: io.rainrobot.adwisdom.repository.ex. * - но когда я запускаю тест, я получаю эту ошибку:

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page io.rainrobot.adwisdom.repository.es.AskElasticRepository.findByTitle(java.lang.String,org.springframework.data.domain.PageRequest)! No property title found for type Ask!

вот конфигурации:

    @SpringBootApplication public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }}
    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(basePackages="io.rainrobot.adwisdom.repository.sql") 
    @EntityScan(basePackages = {"io.rainrobot.adwisdom.dto"},
                basePackageClasses = {Jsr310JpaConverters.class})
    public class  JpaConfig {
    }
    @Configuration
    @EnableElasticsearchRepositories(basePackages=
        "io.rainrobot.adwisdom.repository.es")
    @EntityScan(basePackages = {"io.rainrobot.adwisdom.dto"},
        basePackageClasses = {Jsr310JpaConverters.class})
    public class ElasticsearchCongifuration {
        @Value("${elasticsearch.host:localhost}")
        public String host;
        @Value("${elasticsearch.port:9300}")
        public int port;

        @Bean
        public Client client(){
            TransportClient client = null;
            try{
                InetAddress inetAddress = InetAddress.getByName(host);
                TransportAddress transportAddress
                    = new TransportAddress(inetAddress, port);
                client = new PreBuiltTransportClient(Settings.EMPTY)
                    .addTransportAddress(transportAddress);
             } catch (UnknownHostException e) {  }
             return client;
        }
    }

и application.properties:

# JPA config
spring.datasource.url=jdbc:mysql://localhost:3306/advisdom?useTimezone=true&serverTimezone=UTC&createDatabaseIfNotExist=true
spring.datasource.username=admin
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

# Local Elasticsearch config
elasticsearch.host=localhost
elasticsearch.port=9200

loggin.level.org.springframework: DEBUG

# App config
server.port=8102
spring.application.name=BootElastic

как я могу исключить компоненты с @DataJpaTest?

1 Ответ

1 голос
/ 05 октября 2019

Фильтр влияет только на сканирование компонентов. Если это сканирование обнаружит вашу конфигурацию в этой строке:

@EnableElasticsearchRepositories(basePackages=
    "io.rainrobot.adwisdom.repository.es")

Затем включит репозитории для пакета, который вы пытались исключить.

По крайней мере, это мое понимание. Должно быть легко проверить, удаляете ли вы эту строку из вашей конфигурации.

...