如何从属性文件中将字符串数组设置为@EnableJpaRepositories

时间:2016-07-25 11:36:22

标签: spring-data spring-data-jpa

我有一个带有@EnableJpaRepositories注释的jpa配置文件。我从application.properties文件中设置了这个注释值,如下所示:

@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 {
}

但它不起作用。任何的想法 ?我怎么能在配置文件中执行此操作?

1 个答案:

答案 0 :(得分:5)

正如@amicoderozer所问,如果你的类共享一个公共基本包,你只需要指明root包。

如果不是你的情况(尽管你是从配置文件加载或手动声明它们)可能问题(将帮助发布任何异常或运行时跟踪)是使用split方法的方式。它返回一个数组,我想生成的代码将是这样的:

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

该代码无法编译。

从来没有在组件的注释中尝试过Spring EL,但是尽管如此,也许你应该这样指出basePackages

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

如果不起作用,我建议您首先通过手动数组声明对其进行测试:

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

确保一切正常,然后再尝试从配置文件中读取和解析。

<强>更新  经过一些阅读后,我得出结论认为不可能做你想做的事。允许使用SpEL in many places但是对于注释,只有@Value注释的文档和工作示例。