spring boot - كيف يمكنك استخدام كل من جبا البيانات الربيع ومستودعات سبرينغ داتا إلاستيكشيرتش على نفس فئة المجال في تطبيق التمهيد الربيع؟




spring-boot spring-data (2)

يمكنك استخدام مثل هذا:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
public class DataConfiguration {
    ...
}

أو في سبرينغبوت:

@SpringBootApplication
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class))
public class MyApplication {
    ...
}

أحاول استخدام كل من بيانات جبا الربيع والبيانات الربيع إلاستيكشيرتش على نفس كائن المجال ولكن لا يعمل.

عندما حاولت إجراء اختبار بسيط، حصلت على الاستثناء التالي:

org.springframework.data.mapping.PropertyReferenceException: لم يتم العثور على فهرس خاصية للنوع بيرسون! في org.springframework.data.mapping.PropertyPath. (PropertyPath.java:75) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] في org.springframework.data.mapping.PropertyPath.create (بروبيرتيباث .java: 327) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] أت org.springframework.data.mapping.PropertyPath.create (PropertyPath.java:307) ~ [سبرينغ-داتا-commons- 1.11.0.RELEASE.jar: نا] في org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:270) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] أت أورغ. springframework.data.mapping.PropertyPath.from (PropertyPath.java:241) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] على org.springframework.data.repository.query.parser.Part. ( الجزء الأول، سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] أت org.springframework.data.repository.query.parser.PartTree $ Predicate.buildTree (PartTree.java:373) ~ [سبرينغ-داتا-كومونس-1.11 .0.RELEASE.jar: نا] في org.springframework.data.repository.query.parser.PartTree $ بريديكات. (PartTree.java:353) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] في org.springframework.data .repository.query.parser.PartTree. (PartTree.java:84) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] أت org.springframework.data.jpa.repository.query.PartTreeJpaQuery. ( PartTreeJpaQuery.java:61) ~ [سبرينغ-داتا-جبا-1.9.0.RELEASE.jar: نا] في org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:95) ~ [سبرينغ-داتا-جبا-1.9.0.RELEASE.jar: نا] في org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:206) ~ [سبرينغ-داتا-jpa- 1.9.0.RELEASE.jar: نا] في org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ AugustQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:73) ~ [سبرينغ-داتا-جبا-1.9.0.RELEASE.jar : نا] في org.springframework.data.repository.c ore.support.RepositoryFactorySupport $ كيريكسكوريمثود إنترسيبتور. (RepositoryFactorySupport.java:408) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] في org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository ( RepositoryFactorySupport.java:206) ~ [سبرينغ-داتا-كومونس-1.11.0.RELEASE.jar: نا] في org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn (RepositoryFactoryBeanSupport.java:251) ~ [سبرينغ -data-كومونس-1.11.0.RELEASE.jar: نا] في org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet (RepositoryFactoryBeanSupport.java:237) ~ [سبرينغ-داتا-كومونس-1.11.0. RELEASE.jar: نا] في org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet (JpaRepositoryFactoryBean.java:92) ~ [سبرينغ-داتا-جبا-1.9.0.RELEASE.jar: نا] في أورغ. springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AugustAutowireCapableBeanFactory.java:1637) ~ [سب رينج-بينز-4.2.1.RELEASE.jar: 4.2.1.RELEASE] في org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AugustAutowireCapableBeanFactory.java:1574) ~ [سبرينغ-بينز-4.2.1.RELEASE .jar: 4.2.1.RELEASE] ... تم حذف 43 إطارا مشتركا

أنها تعمل عند تعطيل أي واحد.

ويستند المشروع على التمهيد الربيع 1.3.0.M5.

هذا مشروع نموذجي يستنسخ الوضع:

https://github.com/izeye/spring-boot-throwaway-branches/tree/data-jpa-and-elasticsearch


المستودعات في الربيع البيانات هي مصدر البيانات الملحد، وهذا يعني أن JpaRepository و JpaRepository حد سواء نشمر في واجهة Repository . عندما يكون هذا هو الحال، ثم التكوين التلقائي من التمهيد الربيع سوف يسبب جبا البيانات الربيع لمحاولة تكوين حاوية لكل مستودع في المشروع الذي يرث أي مستودع قاعدة بيانات سبرينغ كومونس.

لإصلاح هذه المشكلة تحتاج إلى نقل مستودع جبا ومستودع إلاستيكشيرتش لفصل الحزم وتأكد من @SpringBootApplication فئة التطبيق @SpringBootApplication مع:

  • @EnableJpaRepositories
  • @EnableElasticsearchRepositories

ثم تحتاج إلى تحديد مكان المستودعات لكل تمكين التعليق التوضيحي. وينتهي هذا الأمر بالشكل التالي:

@SpringBootApplication
@EnableJpaRepositories("com.izeye.throwaway.data")
@EnableElasticsearchRepositories("com.izeye.throwaway.indexing")
public class Application {

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

}

ثم التطبيق الخاص بك سوف تكون قادرة على ديامبيغ التي المستودعات المقصود لمشروع البيانات الربيع.