日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置

發(fā)布時(shí)間:2025/6/15 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、新建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
  • 配置文件的作用大家都清楚了,是因?yàn)槲覀兛梢栽赼pplicationContext.xml文件中以${master.jdbc.url}的形式讀取內(nèi)容,配置文件一般在/src/目錄下。

    二、配置applicationContext.xml

  • <!-- 將多個(gè)配置文件讀取到容器中,交給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 配置數(shù)據(jù)源 -->
  • <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 配置數(shù)據(jù)源 -->
  • <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>
  • <!-- 配置事務(wù)管理器 -->
  • <bean id="transactionManager"
  • class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  • p:dataSource-ref="dataSource" />
  • <!-- 數(shù)據(jù)源切換類 -->
  • <bean id="dataSourceChoose" class="cn.mayongfa.interceptor.DataSourceChoose" />
  • <!-- 通過(guò)AOP配置提供事務(wù)增強(qiáng),讓service包下所有Bean的所有方法擁有事務(wù) -->
  • ...
  • 上面配置我省略了 druid 數(shù)據(jù)連接池的一些配置和 service 層事務(wù)處理,文件并不完整,具體文件示例見GitHub:https://github.com/mafly/SpringDemo/blob/master/WebContent/WEB-INF/applicationContext.xml

    如何使用阿?

    我直接貼一個(gè)具體的 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);
  • /**
  • * 根據(jù)條件獲取數(shù)據(jù)條數(shù)
  • * @return
  • */
  • @DataSource(DataSourceType.Slave)
  • public int getListCount(Map<String, Object> whereMap);
  • /**
  • * 獲取所有
  • * @return
  • */
  • @DataSource(DataSourceType.Slave)
  • public List<UserBasis> getList();
  • }
  • 就是直接打標(biāo)簽的形式切換就可以了,這里需要注意的有兩點(diǎn),也是我們?cè)?jīng)踩過(guò)的坑:
    1.注意事務(wù)是在何處!就是說(shuō),要在一個(gè)事務(wù)開始之前做數(shù)據(jù)源的切換。
    2.不要又想寫又想讀!還是在一個(gè)事務(wù)內(nèi)不要有讀的方法又有寫的方法。

    到這里讀寫分離和主從動(dòng)態(tài)切換數(shù)據(jù)源的配置以及使用就完整了。接下來(lái)思考:我們是不是有時(shí)候項(xiàng)目都是要一主多從、多主多從?

    一主多從、多主多從

    一主多從的架構(gòu)很多人都在使用,美其名是減小讀數(shù)據(jù)的壓力,我還是保留上一篇文章的看法,可能數(shù)據(jù)安全是最大的作用,再有就是你有數(shù)據(jù)報(bào)表和數(shù)據(jù)統(tǒng)計(jì)系統(tǒng),使用一主多從架構(gòu)可以避免生產(chǎn)服務(wù)器的訪問(wèn)壓力過(guò)大。
    配置一主多從架構(gòu)其實(shí)根據(jù)我們上面的設(shè)計(jì)就很簡(jiǎn)單了,只需要在applicationContext.xml文件中配置多個(gè)從庫(kù)數(shù)據(jù)源就可以,然后當(dāng)你讀取從庫(kù)時(shí),可根據(jù)你現(xiàn)有的從庫(kù)數(shù)來(lái)進(jìn)行一些負(fù)載均衡算法的切換,我這里就不再演示了。

    多主多從是什么鬼?首先我需要說(shuō)明的是多主多從這里并不是指的同一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù),是指不同的業(yè)務(wù)數(shù)據(jù)庫(kù),就是大家所說(shuō)的「分庫(kù)分表」中的分庫(kù),就是說(shuō)我們一個(gè)項(xiàng)目中分出了不同的業(yè)務(wù)數(shù)據(jù)庫(kù),然后這些不同的數(shù)據(jù)庫(kù)也可以有多個(gè)從庫(kù),可不是一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)有多個(gè)主庫(kù)、多個(gè)從庫(kù),據(jù)我所知, MySql 的復(fù)制也是不建議這么做的。
    了解清楚概念后,我們目標(biāo)就清晰了,其實(shí)根據(jù)我們的數(shù)據(jù)源切換架構(gòu),再接著配置多個(gè)數(shù)據(jù)源就可以了。其實(shí)也是這么簡(jiǎn)單的意思,比如:項(xiàng)目中有個(gè)金幣系統(tǒng),用戶完成我們期望的操作就會(huì)給他相應(yīng)的金幣,他可以用金幣兌換我們商城里的物品。這時(shí)候,其實(shí)我們就應(yīng)該有個(gè)金幣庫(kù)了,不要再去和業(yè)務(wù)共用一個(gè)數(shù)據(jù)庫(kù),所以,這時(shí)候就會(huì)用到我們「多主多從」的架構(gòu)了。

    轉(zhuǎn)載于:https://www.cnblogs.com/zhanghaiyang/p/7212882.html

    總結(jié)

    以上是生活随笔為你收集整理的Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。