2016-07-25 7 views
1

@EnableJpaRepositories annotaion이있는 jpa 구성 파일이 있습니다. 나는 application.properties 파일에서이 같은이 annotaion 값 설정 :@EnableJpaRepositories에 문자열 배열을 속성 파일에서 설정하는 방법

@EnableJpaRepositories("${jpa.repository.packages}") 
public class JPAConfiguration { 
    .... 
} 

을 여기에 내 application.properties 파일입니다

jpa.repository.packages=com.epms.model 

그것은 완벽하게 작동합니다. 하지만 @EnableJpaRepositories에 대해 여러 패키지를 지정하려고합니다. 이에

jpa.repository.packages=com.epms.model,com.ecms.model 

또한 구성 파일을 :

@EnableJpaRepositories("#{'${jpa.repository.packages}'.split(',')}") 
public class JPAConfiguration { 
} 

을하지만 그것은 작동하지 않습니다 그래서 난이 내 config 파일을 변경했습니다. 어떤 생각? 어떻게 구성 파일에서이 작업을 수행 할 수 있습니까?

+0

스캔하려는 모든 패키지가 com 패키지에 있습니다. – amicoderozer

+0

아니요. 설정 파일에서로드해야합니다. – zhozhe

+0

@zhozhe 정확하게 똑같은 문제를 다루고 있습니다. 저장소 패키지를 하드 코드하고 싶지는 않지만이를 수행 할 방법을 찾지 못했습니다. 해결 방법을 찾았습니까? – zerayaqob

답변

4

@amicoderozer가 묻는 것처럼 클래스가 공통 기본 패키지를 공유하는 경우 루트 패키지 만 나타내야합니다.

어쩌면 문제를 (당신이 설정 파일에서로드 또는 수동으로 선포에도 불구하고)는 귀하의 경우가 아니라면 (어떤 예외 또는 런타임 추적을 게시 도움이 될 것입니다)는 split 방법이 사용되는 방법입니다. 그것은 배열을 반환하고 생성 된 코드는 다음과 같을 것입니다.

@EnableJpaRepositories("jpa.repository.packages1","jpa.repository.packages2") 

코드가 컴파일되지 않습니다.

는 구성 요소의 주석 내부에 스프링 EL을 해본 적이 있지만, 그럼에도 불구하고, 어쩌면 당신은 basePackages 이런 식으로 표시해야합니다 :

@EnableJpaRepositories(basePackages = "#{'${jpa.repository.packages}'.split(',')}") 

내가 권 해드립니다 작동하지 않는 경우를 먼저 수동 배열 선언을 테스트하십시오.

@EnableJpaRepositories(basePackages = { "com.epms.model","com.ecms.model" }) 

예상대로 작동하고 다시 config 파일에서 읽기 및 구문 분석을 시도하십시오.


UPDATE : 일부 판독 후 는, 나는 당신이 원하는 것을 할 수 없습니다 체결했습니다. SpELin many places으로 허용되지만 주석의 경우 @Value 주석이있는 문서 및 작동 예제 만 있습니다.

+0

내 경우에는 @amicoderozer라고 말했기 때문에 다른 패키지가 있는데이 방법을 사용해야한다. 또한 수동 배열 선언을 시도하고 완벽하게 작동하지만 SPEL을 사용할 때 실패합니다. (심지어 권장 방법으로) – zhozhe

+0

출력이 실패 할 때 게시 할 수 있습니까? – exoddus

+0

패키지에서 빈을로드하는 데 실패하고 스프링은이 예외를 throw합니다. [ir.epms.model.user.UserRepository] 유형의 유효한 bean이 없습니다. – zhozhe

관련 문제