2016-09-01 19 views
7

Uygulamam, Spring Boot JPA'yı kullanarak bunları oluşturmak için Spring Boot, Hibernate, MySQL'i temel alır.Spring Boot Deposu Açıklamalı Not Arayüzü'nde birden fazla veri kaynağı

Kullanım durumu, ana mysql düğümünden gelen tüm trafiğin engellenmesi için ağır okuma işlemleri yapmak için slave db düğümü kullanmaktır. Bunu gerçekleştirmenin bir yolu, ayrı veri kaynaklarına işaret eden birden fazla Varlık Yöneticisine sahip olmaktır (biri diğerine ve diğeri köle düğümüne). Bu şekilde SO soruları ve bloglarının altında oldukça iyi açıklanmıştır. Ben şaşırıp

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot-and-spring-data-jpa/

Spring Boot, Spring Data JPA with multiple DataSources

benim Depo Açıklamalı Arabirimi farklı kullanım durumları için farklı varlık yöneticileri enjekte bir yolu var olup olmadığını anlamaktır.

Bunu görebilmemin tek yolu, aşağıdaki gibi ilgili persistenceContext ile açıklamalı özel varlık yöneticisini kullanan özel bir uygulama ile deposu genişletmektir.

public interface CustomerRepository extends JpaRepository<Customer, Integer>, MyCustomCustomerRepository{ 
} 

public class MyCustomCustomerRepositoryImpl implements MyCustomCustomerRepository { 

     @PersistenceContext(unitName = "entityManagerFactoryTwo") 
     EntityManager entityManager; 
} 

Bu özel bir uygulama yapıyor önlemek istiyoruz. Bu kullanım durumunun çözülmesinde (çok yaygın olması gerektiğini düşündüğüm) herhangi bir yardım memnuniyetle karşılanacaktır.

NOT: Varlıklar her iki veritabanında da aynıdır, bu nedenle varlık taraması ve benzer çözümler için ayrı paketler vermeyebilir.

+0

mu [bu örnek] (https://github.com/snicoll-demos/demo-multi-entity-managers/) yardımcı olur? –

+1

Paylaştığınız demo, farklı dbs'de iki farklı varlığa sahiptir. Böyle bir durum için iki varlık yöneticisini kullanırken çatışmalardan kaçınmak daha kolay hale gelir. Benim için varlıklar, master veya slave db için kullansak da aynı kalır. –

cevap

3

Kullanabileceğiniz güzel bir örnek: dynamic-datasource-routing-with-spring. İçinde, hizmet yöntemini gerekli bir veritabanına bağlayan özel bir ek açıklama için AbstractRoutingDatasource + bir engelleyici bulabilirsiniz. Ancak, veri kaynağı anahtarını açıkça kullanabilirsiniz.

+0

Örnek, xml yapılandırmaları kullanarak yetersiz yapıyor olsa da ve projem çoğunlukla ek açıklamadır, sağlanan yanıt bana işlevselliğin nasıl sağlanacağı konusunda iyi bir bağlam sağlar. Teşekkürler :) –