***
jdbc.properties
プロファイル
master.jdbc.driverClassName=com.mysql.jdbc.Driver
master.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
master.jdbc.username=root
master.jdbc.password=123456
slave.jdbc.driverClassName=com.mysql.jdbc.Driver
slave.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
slave.jdbc.username=read
slave.jdbc.password=123456
, applicationContext.xml
ファイルでは${master.jdbc.url}
としてコンテンツが み され、プロファイルは に/src/
ディレクトリの にある.
、 applicationContext.xml
<!-- , Spring -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:global.properties</value>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!--master -->
<bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName">
<value>${master.jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${master.jdbc.url}</value>
</property>
<property name="username">
<value>${master.jdbc.username}</value>
</property>
<property name="password">
<value>${master.jdbc.password}</value>
</property>
...
</bean>
<!--slave -->
<bean id="slaveDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName">
<value>${slave.jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${slave.jdbc.url}</value>
</property>
<property name="username">
<value>${slave.jdbc.username}</value>
</property>
<property name="password">
<value>${slave.jdbc.password}</value>
</property>
...
</bean>
<bean id="dataSource" class="cn.mayongfa.service.imp.DynamicDataSource">
<property name="targetDataSources">
<map>
<entry key="slave" value-ref="slaveDataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="masterDataSource" />
</bean>
<!-- Jdbc -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
<!-- -->
<bean id="dataSourceChoose" class="cn.mayongfa.interceptor.DataSourceChoose" />
<!-- AOP , service Bean -->
...
druid service , , GitHub:https://github.com/mafly/SpringDemo/blob/master/WebContent/WEB-INF/applicationContext.xml
?
Service 。
public interface UserBasisService {
/**
*
* @param entity
* @return
*/
@DataSource
public long Save(UserBasis entity);
/**
*
* @param ID
* @return
*/
@DataSource
public Boolean Delete(long ID);
/**
*
* @param ID
* @return
*/
@DataSource(DataSourceType.Slave)
public UserBasis getEntity(long ID);
/**
*
* @return
*/
@DataSource(DataSourceType.Slave)
public int getListCount(Map<String, Object> whereMap);
/**
*
* @return
*/
@DataSource(DataSourceType.Slave)
public List<UserBasis> getList();
}
, , :
1. ! , 。
2. ! 。
。 : 、 ?
、
のアーキテクチャは くの が しています.その はデータを む を らすことです. はやはり の の を しています.データの が の である があります.また、データレポートとデータ システムを っています.マスターを ってアーキテクチャから サーバへのアクセス を けることができます.マスターマルチスレーブアーキテクチャの は、 には の に づいて です.applicationContext.xml
ファイルに のスレーブ・データ・ソースを するだけでいいです.そして、スレーブ・ライブラリを み むと、 のスレーブ・ライブラリ に づいて アルゴリズムの り えを うことができます.ここでは しません.
の ?まず が しなければならないのは、マルチマスターがここから じビジネスデータベースを すのではなく、 なるビジネスデータベースを すのではなく、みんなが っている「ライブラリ 」のライブラリを すのです.つまり、 たちのプロジェクトで なるビジネスデータベースを けたのです.それから、これらの なるデータベースにも のライブラリがありますが、1つのビジネスデータベースに のマスターライブラリがあるわけではありません. のライブラリから、 の っている りでは、MySqlのレプリケーションも されていません. を すると、 が らかになります. は、 たちのデータソースに づいてアーキテクチャを り え、 のデータソースを すればいいのです. えば、プロジェクトに システムがあり、ユーザーが たちが んでいる を すると、 を たちのショッピングモールの に することができます.この 、 は は
があるべきで、もう と1つのデータベースを しないでください、だから、この の"マルチマスターマルチスレーブ"のアーキテクチャを います.