2016-07-25 45 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