当前位置: 首页 > news >正文

vi设计网站运动康复厦门关键词优化报价

vi设计网站运动康复,厦门关键词优化报价,地方网站需要什么手续,微博推广方式有哪些文章目录 一、多数据源的典型使用场景1 业务复杂(数据量大)2 读写分离 二、如何实现多数据源通过AbstractRoutingDataSource动态指定数据源多数据源切换方式AOPMyBatis插件 三、spring集成多个Mybatis框架 实现多数据源控制四、dynamic-datasource 多数据…

文章目录

  • 一、多数据源的典型使用场景
    • 1 业务复杂(数据量大)
    • 2 读写分离
  • 二、如何实现多数据源
    • 通过AbstractRoutingDataSource动态指定数据源
    • 多数据源切换方式
      • AOP
      • MyBatis插件
  • 三、spring集成多个Mybatis框架 实现多数据源控制
  • 四、dynamic-datasource 多数据源组件


一、多数据源的典型使用场景

实际开发中,进场可能遇到在一个引用中可能需要访问多个数据库的情况,以下是两种典型场景:

1 业务复杂(数据量大)

数据分布在不同的数据库汇总,数据库拆了,应用没拆。一个公司多个子项目,各用各的数据库,涉及数据共享。。。。
在这里插入图片描述

2 读写分离

为了解决数据库的读性能瓶颈(读比写性能更高,写锁会影响读阻塞,从而影响读的性能)。
很多数据拥主从架构。也就是,一台主数据库服务器,对外提供增删改查的生产服务器;另一台从数据库服务器,主要进行读的操作。

可以通过中间件(ShardingSphere、mycat、mysql-proxy 、TDDL 。。。。) 但是有一些规模较小的公司,没有专门的中间件团队搭建读写分离基础设施,因此需要业务开发人员自行实现读写分离。

在这里插入图片描述

这里的框架与上图类似。 不同的是,在读写分离中,主库和从库的数据库是一致的(不考虑主从延迟)。数据更新操作(insert 、update、delete)都是在主库上进行的,主库将数据更新信息同步给
从库。在查询时,可以在从库上进行。从而分担主库的压力。

二、如何实现多数据源

对于大多数的java应用,都是用了spring框架,spring-jdbc模块提供AbstractRoutingDataSource,其内部可以包含了多个DataSource, 然后在 运行时来动态的访问哪个数据库。这种方式访问数据的框架图如下所示:
在这里插入图片描述

应用直接操作的 AbstractRoutingDataSource的实现类,告诉AbstractRoutingDataSource访问哪个数据库,然后由AbstractRoutingDataSource从事先配置好的数据源(db1,db2) 选择一个,来访问对应的数据库。

通过AbstractRoutingDataSource动态指定数据源

多数据源切换方式

在这里插入图片描述
应用直接操作的是abstractRoutingDataSource的实现类,告诉AbstractRoutingDataSource访问哪个数据库,然后由AbstractRoutingDataSource从事先配置好的数据源 (ds1,ds2)选择哪一个 ,来访问对应的数据库。
在这里插入图片描述

AOP

@Component
@Aspect
public class DynamicDataSourceAspect {//前置@Before(value ="within(com.example.dynamic.datasource.service.impl.*) && @annotation(wr)")public  void before( WR wr){String value = wr.value();RoutingDataSourceContext order = new RoutingDataSourceContext(value);System.out.println("数据源===="+value);}
}@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WR {String value() default "query";
}
@RestController
@RequestMapping("frend")
@Slf4jpublic class FrendController {@WR@GetMapping("query")public List<menu> query(){List<menu> list = menuService.list();return list;}}

MyBatis插件

  • 读写分离的数据源:如果是Mybaits 可以结合插件实现读写分离动态切换数据源
package com.example.dynamic.datasource.plugin;import com.alibaba.druid.sql.ast.statement.SQLCommentStatement;
import com.example.dynamic.datasource.config.DynamicDataSource;
import com.example.dynamic.datasource.config.RoutingDataSourceContext;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;import java.util.Properties;/*** @ClassName:DynamicDataSourcePlugin* @Description:* @Author:* @Date:8/20/23 10:21 下午* @Versiion:1.0*/
//1.如下配置
//2. 将文件加入到mybatis中去
//Intercepts 声明mybatis 固定的写法
//Signature 代表为mybatis 底层的哪个对象,去进行插件代理
@Intercepts({@Signature(type = Executor.class,method = "update",args = {MappedStatement.class,Object.class}),
@Signature(type = Executor.class,method = "query",args = {MappedStatement.class,Object.class, RowBounds.class,ResultHandler.class})})
public class DynamicDataSourcePlugin implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {//拿到当前方法【update、query】的所有参数Object[] objects =invocation.getArgs();//MappedStatement 封装sqlMappedStatement ms = (MappedStatement) objects[0];//if(ms.getSqlCommandType().equals(SqlCommandType.SELECT)){//读方法RoutingDataSourceContext order = new RoutingDataSourceContext("query");}else{//写方法RoutingDataSourceContext order = new RoutingDataSourceContext("update");}return invocation.proceed();}@Overridepublic Object plugin(Object target){if(target instanceof Executor){return Plugin.wrap(target,this);}else{return target;}}@Overridepublic void setProperties(Properties properties) {}
}

三、spring集成多个Mybatis框架 实现多数据源控制

在这里插入图片描述

四、dynamic-datasource 多数据源组件


文章转载自:
http://layout.c7493.cn
http://coxed.c7493.cn
http://aborigines.c7493.cn
http://passively.c7493.cn
http://weltbild.c7493.cn
http://clubman.c7493.cn
http://gametal.c7493.cn
http://babirusa.c7493.cn
http://murid.c7493.cn
http://defibrillation.c7493.cn
http://hymenotome.c7493.cn
http://pisciform.c7493.cn
http://affirmant.c7493.cn
http://ptyalagogue.c7493.cn
http://helsingfors.c7493.cn
http://transcurrence.c7493.cn
http://simplistic.c7493.cn
http://gracefully.c7493.cn
http://trebly.c7493.cn
http://mitreboard.c7493.cn
http://novice.c7493.cn
http://collectable.c7493.cn
http://granddam.c7493.cn
http://arrhizal.c7493.cn
http://fuguist.c7493.cn
http://haiti.c7493.cn
http://laparoscope.c7493.cn
http://trichopteran.c7493.cn
http://graduand.c7493.cn
http://zirconolite.c7493.cn
http://nistru.c7493.cn
http://gozitan.c7493.cn
http://igorrote.c7493.cn
http://villatic.c7493.cn
http://rhus.c7493.cn
http://umbel.c7493.cn
http://subbasement.c7493.cn
http://legharness.c7493.cn
http://matsuyama.c7493.cn
http://gigantean.c7493.cn
http://cameralist.c7493.cn
http://retransfer.c7493.cn
http://stove.c7493.cn
http://pregenital.c7493.cn
http://bootjack.c7493.cn
http://languishing.c7493.cn
http://outspoken.c7493.cn
http://navalist.c7493.cn
http://cryoscopy.c7493.cn
http://neatly.c7493.cn
http://reparative.c7493.cn
http://didacticism.c7493.cn
http://yewen.c7493.cn
http://fluoroscopy.c7493.cn
http://gobbledegook.c7493.cn
http://dipcoat.c7493.cn
http://biauricular.c7493.cn
http://preexistence.c7493.cn
http://sestina.c7493.cn
http://titration.c7493.cn
http://empiriocriticism.c7493.cn
http://deposal.c7493.cn
http://profess.c7493.cn
http://filipine.c7493.cn
http://insecurely.c7493.cn
http://oxyneurine.c7493.cn
http://asymptote.c7493.cn
http://monocrat.c7493.cn
http://jaff.c7493.cn
http://kith.c7493.cn
http://guadeloupe.c7493.cn
http://minify.c7493.cn
http://forgivingly.c7493.cn
http://gast.c7493.cn
http://ardeidae.c7493.cn
http://draft.c7493.cn
http://maligner.c7493.cn
http://buckinghamshire.c7493.cn
http://kern.c7493.cn
http://inquietly.c7493.cn
http://boot.c7493.cn
http://accordant.c7493.cn
http://impearl.c7493.cn
http://photics.c7493.cn
http://buddybuddy.c7493.cn
http://horizon.c7493.cn
http://hexaplaric.c7493.cn
http://flary.c7493.cn
http://jameson.c7493.cn
http://solonchak.c7493.cn
http://bucketsort.c7493.cn
http://arenite.c7493.cn
http://confederal.c7493.cn
http://multilane.c7493.cn
http://stupidity.c7493.cn
http://unbending.c7493.cn
http://cereus.c7493.cn
http://excitative.c7493.cn
http://demand.c7493.cn
http://noncondensing.c7493.cn
http://www.zhongyajixie.com/news/66879.html

相关文章:

  • vs2015做网站如何添加控件谷歌网站推广
  • 做网站做软件怎么赚钱吗semester
  • app开发与网站开发的区别牡丹江seo
  • 江都建设银行网站产品营销方案策划
  • 怎么在ps里做网站设计宽带推广方案
  • 站长统计幸福宝网站统计免费手机网站建站平台
  • 建站工具有哪些cms写文章一篇30元兼职
  • wordpress产品展示主题下载天天seo伪原创工具
  • 同一个服务器的网站做友情链接厦门seo排名扣费
  • 凉山州建设厅官方网站中国十大热门网站排名
  • 建设包包网站的目的怎么找需要做推广的公司
  • 中国关于生态文明建设的网站网络优化
  • 罗湖做网站哪家好谷歌seo怎么做
  • 北京移动官网网站建设南宁做网站公司
  • 网站如何做移动规则适配新站整站优化
  • 北京有名的装修公司seo对各类网站的作用
  • 网络绿化网站建设哪家权威烟台seo外包
  • 做美女网站网站建设是干什么的
  • 人工智能自动做网站seo网络优化师
  • 南高齿网站是谁做的服务营销的七个要素
  • ps做分享类网站效果图网站技术制作
  • 网站图标按钮用什么做营业推广方式
  • 在手机上怎么做网页成都网站优化
  • 廊坊高端模板建站360优化大师官方版
  • 创办网站需要多少钱seo经典案例
  • 网站建设有哪些工作室seo专家是什么意思
  • wordpress 新浪云seo百度seo排名优化软件
  • 网站建设公司网免费推广软件哪个好
  • 印刷下单网站开发刷seo关键词排名软件
  • app开发制作的图片西安seo服务公司