2016-07-25 44 views
1

我有一個jpa配置文件@EnableJpaRepositories註釋。我設置annotaion值從application.properties文件是這樣的:如何從屬性文件設置字符串數組到@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 { 
} 

,但它不工作。任何想法 ?我怎麼能在我的配置文件中做到這一點?

+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" }) 

確保所有按預期工作,然後再次嘗試從配置文件讀取和解析。


UPDATE: 一些讀數之後,我已經得出結論,是不可能做你想要什麼。允許使用SpELin many places,但對於註釋,只有文檔和使用@Value註釋的工作示例。

+0

正如我對@amicoderozer所說的那樣,在我的情況下有不同的包,我必須使用這種方法。我也嘗試過通過手動數組聲明,它工作的很完美,但是當我想使用SPEL時,它失敗了(即使用你推薦的方式) – zhozhe

+0

你可以發佈失敗時的輸出嗎? – exoddus

+0

它無法加載該包中的bean,並且彈出此異常:沒有找到類型爲[ir.epms.model.user.UserRepository]的合格bean。 – zhozhe