Spring EnableJpaRepositories:構成可能なbasePackages。



Spring Enablejparepositories



Javaアノテーションのプロパティは、変数はもちろん、列挙型ではなく定数でなければならないことを私たちは知っています。

したがって、@ EnableJpaRepositoriesアノテーションが付けられたbasePackagesも定数である必要があります。例えば:



@Configuration @EnableJpaRepositories( entityManagerFactoryRef = 'userEntityManagerFactory', basePackages = 'com.myCompany.user.repository', // must be a constant transactionManagerRef='userTransactionManager' ) public class UserDataSourceConfiguration{ }

したがって、問題は、構成ファイルからbasePackagesを読み取りたい場合はどうなるかということです。

幸い、Springは、Environmentオブジェクトから構成を読み取るのと同じように、「$ {}」式を直接使用して、これを行うことをサポートしています。



@Configuration @EnableJpaRepositories( entityManagerFactoryRef = 'userEntityManagerFactory', basePackages = '${customized.datasource.user.repository}', / / ​​read from the configuration transactionManagerRef='userTransactionManager' ) public class UserDataSourceConfiguration{ }

文字通りbasePackagesは定数ですが、式の解析、JPA関連のBeanDefinitionsの登録など、Springが残りの作業を行います。 o.s.d.r.c.RepositoryBeanDefinitionRegistrarSupport#registerBeanDefinitionsを参照してください。

構成customized.datasource.user.repositoryが見つからない場合、アプリケーションは起動しないため、アプリケーションの起動を妨げないように、デフォルト値を指定することをお勧めします。

@Configuration @EnableJpaRepositories( entityManagerFactoryRef = 'userEntityManagerFactory', basePackages = '${customized.datasource.user.repository:com.myCompany.defaultPackage}', transactionManagerRef='userTransactionManager' ) public class UserDataSourceConfiguration{ }

コロンの後にデフォルト値が続きます。デフォルト値は、存在しないパッケージにすることもできます。デフォルト値は一重引用符で囲まないでください。