***

53431 ワード

一、新規jdbc.propertiesプロファイル

  
  
  
  
  1. master.jdbc.driverClassName=com.mysql.jdbc.Driver
  2. master.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
  3. master.jdbc.username=root
  4. master.jdbc.password=123456
  5. slave.jdbc.driverClassName=com.mysql.jdbc.Driver
  6. slave.jdbc.url=jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=UTF-8
  7. slave.jdbc.username=read
  8. slave.jdbc.password=123456

applicationContext.xmlファイルでは${master.jdbc.url}としてコンテンツが み され、プロファイルは に/src/ディレクトリの にある.
applicationContext.xml


  
  
  
  
  1. <!-- , Spring -->
  2. <bean id="propertyConfigurer"
  3. class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  4. <property name="locations">
  5. <list>
  6. <value>classpath:global.properties</value>
  7. <value>classpath:jdbc.properties</value>
  8. </list>
  9. </property>
  10. </bean>
  11. <!--master -->
  12. <bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource"
  13. init-method="init" destroy-method="close">
  14. <property name="driverClassName">
  15. <value>${master.jdbc.driverClassName}</value>
  16. </property>
  17. <property name="url">
  18. <value>${master.jdbc.url}</value>
  19. </property>
  20. <property name="username">
  21. <value>${master.jdbc.username}</value>
  22. </property>
  23. <property name="password">
  24. <value>${master.jdbc.password}</value>
  25. </property>
  26. ...
  27. </bean>
  28. <!--slave -->
  29. <bean id="slaveDataSource" class="com.alibaba.druid.pool.DruidDataSource"
  30. init-method="init" destroy-method="close">
  31. <property name="driverClassName">
  32. <value>${slave.jdbc.driverClassName}</value>
  33. </property>
  34. <property name="url">
  35. <value>${slave.jdbc.url}</value>
  36. </property>
  37. <property name="username">
  38. <value>${slave.jdbc.username}</value>
  39. </property>
  40. <property name="password">
  41. <value>${slave.jdbc.password}</value>
  42. </property>
  43. ...
  44. </bean>
  45. <bean id="dataSource" class="cn.mayongfa.service.imp.DynamicDataSource">
  46. <property name="targetDataSources">
  47. <map>
  48. <entry key="slave" value-ref="slaveDataSource" />
  49. </map>
  50. </property>
  51. <property name="defaultTargetDataSource" ref="masterDataSource" />
  52. </bean>
  53. <!-- Jdbc -->
  54. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  55. <property name="dataSource" ref="dataSource"></property>
  56. </bean>
  57. <!-- -->
  58. <bean id="transactionManager"
  59. class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  60. p:dataSource-ref="dataSource" />
  61. <!-- -->
  62. <bean id="dataSourceChoose" class="cn.mayongfa.interceptor.DataSourceChoose" />
  63. <!-- AOP , service Bean -->
  64. ...

druid service , , GitHub:https://github.com/mafly/SpringDemo/blob/master/WebContent/WEB-INF/applicationContext.xml

Service 。


  
  
  
  
  1. public interface UserBasisService {
  2. /**
  3. *
  4. * @param entity
  5. * @return
  6. */
  7. @DataSource
  8. public long Save(UserBasis entity);
  9. /**
  10. *
  11. * @param ID
  12. * @return
  13. */
  14. @DataSource
  15. public Boolean Delete(long ID);
  16. /**
  17. *
  18. * @param ID
  19. * @return
  20. */
  21. @DataSource(DataSourceType.Slave)
  22. public UserBasis getEntity(long ID);
  23. /**
  24. *
  25. * @return
  26. */
  27. @DataSource(DataSourceType.Slave)
  28. public int getListCount(Map<String, Object> whereMap);
  29. /**
  30. *
  31. * @return
  32. */
  33. @DataSource(DataSourceType.Slave)
  34. public List<UserBasis> getList();
  35. }

, , :
1. ! , 。
2. ! 。

。 : 、 ?

のアーキテクチャは くの が しています.その はデータを む を らすことです. はやはり の の を しています.データの が の である があります.また、データレポートとデータ システムを っています.マスターを ってアーキテクチャから サーバへのアクセス を けることができます.マスターマルチスレーブアーキテクチャの は、 には の に づいて です.applicationContext.xmlファイルに のスレーブ・データ・ソースを するだけでいいです.そして、スレーブ・ライブラリを み むと、 のスレーブ・ライブラリ に づいて アルゴリズムの り えを うことができます.ここでは しません. の ?まず が しなければならないのは、マルチマスターがここから じビジネスデータベースを すのではなく、 なるビジネスデータベースを すのではなく、みんなが っている「ライブラリ 」のライブラリを すのです.つまり、 たちのプロジェクトで なるビジネスデータベースを けたのです.それから、これらの なるデータベースにも のライブラリがありますが、1つのビジネスデータベースに のマスターライブラリがあるわけではありません. のライブラリから、 の っている りでは、MySqlのレプリケーションも されていません. を すると、 が らかになります. は、 たちのデータソースに づいてアーキテクチャを り え、 のデータソースを すればいいのです. えば、プロジェクトに システムがあり、ユーザーが たちが んでいる を すると、 を たちのショッピングモールの に することができます.この 、 は は があるべきで、もう と1つのデータベースを しないでください、だから、この の"マルチマスターマルチスレーブ"のアーキテクチャを います.