【问题标题】:Spring boot @DataJpaTest exclude filter doesn't workSpring boot @DataJpaTest 排除过滤器不起作用
【发布时间】:2020-02-03 04:31:29
【问题描述】:

我有这个测试:

    @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 排除组件?

【问题讨论】:

    标签: spring-boot spring-data-jpa spring-boot-test


    【解决方案1】:

    过滤器只影响组件扫描。如果该扫描找到您的配置这一行:

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

    然后将为您尝试排除的软件包启用存储库。

    至少这是我的理解。 如果您从配置中删除该行应该很容易验证。

    【讨论】:

    • 那么有没有办法告诉spring在测试中特别忽略@EnableElasticsearchRepositories?
    • 一种方法是将它移动到包中,这样一开始就不会被发现。
    猜你喜欢
    • 2018-06-07
    • 2020-09-15
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多