2013-11-24 9 views
7

パフォーマンス上の理由から、コンポーネントスキャンから明示的にBeanを宣言することに切り替えています。したがって、基本的には、リポジトリをスキャンするときに@EnableJpaRepositoriesを削除したいと考えています。コンポーネントスキャンを使用しないSpringデータJPAリポジトリの設定方法

私のリポジトリは、JpaRepositoryを拡張する標準インタフェースです。私はどのように私のリポジトリを宣言できますか?

答えて

8

は手動JpaRepositoryFactoryBeanを宣言することによって、個々のリポジトリインスタンスを作成することができます。

@Configuration 
class Config { 

    @Bean 
    public JpaRepositoryFactoryBean userRepository() { 
    JpaRepositoryFactoryBean factory = new JpaRepositoryFactoryBean(); 
    factory.setRepositoryInterface(UserRepository.class); 
    return factory; 
    } 
} 

これは、春には、工場からのリポジトリのプロキシを取得するgetObject()を呼び出して、潜在的顧客にそれを注入するようになります。

しかし、私は、まったく間違って構成されていないと、リポジトリをスキャンするオーバーヘッドは無視できると主張します。初期化時と比較してEntityManagerFactoryがかかります。あなたが唯一の具体的なリポジトリBeanを設定したい場合は

+1

おかげオリバーを! –

+1

コンポーネントスキャンは、アプリインスタンスが何らかの時間の経過後に「ウォームアップ」(基本的に完全再デプロイ)する必要がある、いくつかのクラウドランタイム(つまりGoogle App Engine)でパフォーマンスが低下する可能性があります。あなたのソリューションは、あなたが期待していたよりも役に立つかもしれない、ありがとう! –

+0

@Oliver Gierkeこれはすべていいですが、小さな問題が1つあります。私のアプリケーションはマルチテナントなので、私は上記のようにJpaRepositoryFactoryBeanを作成することはできません。それを怠け者にする方法はありますか? JpaRepositoryFactoryBeanもuserRepositoryに添付されていますが、これに対して複数のファクトリBeanを作成するにはどうすればいいですか? –

1

あなたが直接このようにそれを作成するために工場を使用することができます。

​​
関連する問題