2013-01-15 20 views
9

İlkbaharda bir DataSource kullanmanın en iyi yolunu görmek için bakıyorum ama veritabanını Java kodunun içinden değiştirebiliyor muyum? Aşağıda iki DataSource'ım var ve aynı veritabanı sunucusuna ancak farklı veritabanlarına gidiyorlar.İlkbaharda veritabanlarını tek bir DataSource ile programlı olarak nasıl değiştirebilirim?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close"> 
    <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" /> 
    <property name="url" 
       value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE_EMS" /> 
    <property name="username" value="userid" /> 
    <property name="password" value="derp" /> 
</bean> 

<bean id="dataSourceMain" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close"> 
    <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDataSource" /> 
    <property name="url" 
       value="jdbc:sybase:Tds:10.20.30.40:50/DATABASE" /> 
    <property name="username" value="userid" /> 
    <property name="password" value="derp" /> 
</bean> 

Ben onlara kendi ilgili fasulye bağlı ama benim eski kod bakıyorum ve 2 ayrı fasulye bu uygulamaya ÇOK garip olacak sahiptir. İhtiyacım olduğunda bir DataSource'u nasıl kullanabileceğimi ve veritabanlarını nasıl değiştirebileceğine dair herhangi bir fikir/düşünce var mı?

+0

nasıl veritabanını geçmek istiyorsun? Veritabanına karar verme kriterleri nelerdir? –

+0

İyi olan şey dinamik olmak zorunda olmaması. Gerekirse, DAO'yu aramadan önce bunu açıkça değiştirebilirim. – Carlos

cevap

11

Bunu, Spring'in AbstractRoutingDataSource uzantısını genişleterek ve varolan veri kaynaklarınızı içine sararak yapabilirsiniz. Ayrıntılar için this article kontrol edin. makalesinden alıntı:

genel bir fikir bir yönlendirme DataSource aracı olarak hareket etmesidir - 'gerçek' DataSource bir arama anahtar üzerine çalışma dinamik tespit edilebilir iken.

Ayrıca SO benzer soruları bkz:

  1. Using AbstractRoutingDataSource to dynamically change the database schema/catalog
  2. Reading from multiple Db's with same Persistence Unit?
  3. How to create Dynamic connections (datasource) in spring using JDBC
+0

Şimdiye kadar en eksiksiz cevap. Kabul edildi olarak işaretleyeceğim ve bu Bahar işlevlerini doğrulamak için bazı POC'leri yapacağım. Teşekkürler! – Carlos

0

Bunu yapmanın birçok yolu vardır. Örneğin, DatasourceSelectorService servis sınıfını oluşturabilir ve bazı girişleri temel alarak (örneğin: yapılandırma dosyası/kullanıcı girişi) datasource's fasulyeyi buna göre seçer.

datasource gerektiren diğer tüm sınıflar bu DatasourceSelectorService üzerinden edinmelidir.

İlgili konular