2

저는 스프링 데이터 저장소 위에 동적으로 생성 할 수 있도록 스프링 데이터 위에 구축 된 라이브러리를 만드는 중입니다. 스프링 데이터 추상화에서 작동하는이 프로세스의 일반적인 래퍼를 만들려고했다.동적으로 스프링 데이터 저장소 생성하기

이 방법은 클래스 경로 예제에 어떤 종속성이 추가되는지에 따라 달라집니다. spring-data-jpa 또는 spring-data-mongodb 저는 리포지토리를 생성하고이를 내 스프링 컨텍스트에 삽입 할 수 있습니다.

이 작업을 수행하는 방법에 대한 좋은 문서를 찾는 데 어려움을 겪고있었습니다. 어떤 아이디어?

+0

나는 봄 부츠를 당신을 위해한다는 뜻. 그걸 사용하지 않은 이유는 무엇입니까? – Veeram

답변

3

스프링은 클래스 경로에 따라 선택되는 빈/구성을 제어하기 위해 @Conditional 주석을 제공합니다 (spring-boot 자동 구성과 유사).

클래스 경로에 따라 봄에 선택되는 두 개의 구성 클래스를 정의 할 수 있습니다. 예를 들어 :

  1. 구성 같은 것을 볼 수 있었다 클래스 경로에 JPA 존재합니다.

    @Configuration 
    @EnableJpaRepositories(basePackages=...) 
    @Conditional(JpaClassPathCondition.class) 
    public class JpaAutoConfiguration { 
    
        static class JpaClassPathCondition implements Condition { 
    
         @Override 
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 
          return ClassUtils.isPresent("javax.persistence.EntityManager", JpaAutoConfiguration.class.getClassLoader()); 
         } 
        } 
    } 
    
  2. 구성 에 대한 MongoDB를 :

    @Configuration 
    @EnableMongoRepositories(...) 
    @Conditional(MongoClassPathCondition.class) 
    public class MongoAutoConfiguration { 
    
        static class MongoClassPathCondition implements Condition { 
    
         @Override 
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 
          return !ClassUtils.isPresent("javax.persistence.EntityManager", MongoAutoConfiguration.class.getClassLoader());)//or whatever classpath element fits you best 
    
         } 
        } 
    } 
    
    이 시점에서 앞으로에서 할 필요가 모듈에 모두 구성 클래스를 사용하자 봄이 마법

    의하는 것입니다

+0

좋아,이게 나를 가장 좋아하게 만들고있어. 대단한 예! 필자가 완전히 이해하지 못하는 마지막 부분은 스프링 데이터 저장소를 작성한 다음 스프링 컨텍스트에 삽입하는 방법입니다. 예 : mongodb가 classpath에 있으면, N 개의 스프링 데이터 저장소를 생성하고 스프링 응용 프로그램 컨텍스트에 주입합니다. 이 문제는 spring-data-mongodb 의존성에 의존하는 저장소 또는 classpath에있는 JPA 의존성을 생성하는 것을 의미합니다. –

+0

'@ Enable..Repository' 주석이 발견되면 저장소가 자동으로 생성됩니다. 'Repository' 인터페이스 ('CrudRepository','PagingAndSortingRepository')를 구현하는 모든 bean은 Spring app context에 등록되고 autowiring을 위해 사용 가능합니다. –

+0

굉장한 당신을 알렉스 감사합니다! –

관련 문제