一种实现数据库动态切换的方法及计算机可读存储介质技术

技术编号:22295408 阅读:38 留言:0更新日期:2019-10-15 04:34
本发明专利技术提供一种实现数据库动态切换的方法,解析数据源配置文件,形成对应的数据库连接池;定义一套数据源切换的注解;解析注解,将数据库名称放在本地线程副本中;将在线程副本中的数据库名称对应的数据库对象返回给Spring框架,实现数据库的动态切换;本发明专利技术还提供一种计算机可读存储介质,无需其他业务控制代码,即可实现高内聚低耦合,且性能不受影响;在此基础上通过配置可以实现数据库读写分离。

A Method to Realize Dynamic Switching of Database and Computer Readable Storage Media

【技术实现步骤摘要】
一种实现数据库动态切换的方法及计算机可读存储介质
本专利技术涉及一种实现数据库动态切换的方法及计算机可读存储介质。
技术介绍
对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级,并且数据库面临着极高的并发访问。为了满足高并发的访问,同时保证数据库的高可用,一种有效的方式是采用读写分离的架构,以缓解单台数据数据库读写压力;读写分离架构指:一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步;在一个项目种实现读写分离,数据库连接池要进行区分,哪些是读连接池,哪个是写连接池;传统方式往往采用硬编码的形式实现,业务代码和数据源切换代码耦合严重,不利于后期的维护和拓展。SpringBoot:是业内流行的分布式Java开发框架,它简化了Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员只需要定义样板化的配置即可轻松完成各种插件的配置。另外我们可以利用该原理定义自己的SpringBoot的插件。切面编程:AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果;术语:1.pointcut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个pointcut,来捕获相关方法的调用。2.advice(通知):是pointcut的执行代码,是执行“方面”的具体逻辑。3.aspect(切面):pointcut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。线程副本:多线程并发之所以会不安全,就是因为线程不拥有资源,它们共享竞争着进程的资源,这样线程并发起来不安全,一般的解决方案便是用锁,保证每时每刻一个资源最多只能被一个线程拥有。而在java的多线程中,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal解决多线程的并发问题的思路很简单:就是为每一个线程维护一个副本变量,从而让线程拥有私有的资源,就不再需要去竞争进程中的资源。每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
技术实现思路
本专利技术要解决的技术问题,在于提供一种实现数据库动态切换的方法及计算机可读存储介质,无需其他业务控制代码,即可实现高内聚低耦合,且性能不受影响;在此基础上通过配置可以实现数据库读写分离。本专利技术之一是这样实现的:一种实现数据库动态切换的方法,包括:步骤1、解析数据源配置文件,形成对应的数据库连接池;步骤2、定义一套数据源切换的注解;步骤3、解析注解,将数据库名称放在本地线程副本中;步骤4、将在线程副本中的数据库名称对应的数据库对象返回给Spring框架,实现数据库的动态切换。进一步地,所述步骤1进一步具体为:解析数据源配置文件,得到单个数据源配置对象;根据数据源配置文件创建数据源对象;最终生成一个存有数据库列表信息的Map对象,其中,key为数据库的名称,value为对应的数据库实例。进一步地,所述步骤2进一步具体为:定义注解类DS,其为RetentionPolicy.RUNTIME类型的注解,其在代码运行时解析,且只有一个属性用来定义数据源名称。进一步地,所述步骤3进一步具体为:设置切入点,使用spring提供的AbstractPointcutAdvisor接口实现切入点设置,实现切面逻辑;利用AnnotationMatchingPointcut类,实现匹配所有DS.class注解的类和方法;实现切面逻辑,作用在切入点匹配的类和方法上;获取DS注解的属性名称,也就是获取DS注解的方法和类要使用的数据库名称,并将数据库名称放在本地线程副本中。进一步地,所述步骤4进一步具体为:使用Spring提供的AbstractRoutingDataSource接口实现数据源的切换;其方法determineDataSource返回数据源实例,即从本地副本中获取当前方法使用的数据源的名称,并从数据源列表中获取对应的数据源实例。本专利技术之二是这样实现的:一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:步骤1、解析数据源配置文件,形成对应的数据库连接池;步骤2、定义一套数据源切换的注解;步骤3、解析注解,将数据库名称放在本地线程副本中;步骤4、将在线程副本中的数据库名称对应的数据库对象返回给Spring框架,实现数据库的动态切换。进一步地,所述步骤1进一步具体为:解析数据源配置文件,得到单个数据源配置对象;根据数据源配置文件创建数据源对象;最终生成一个存有数据库列表信息的Map对象,其中,key为数据库的名称,value为对应的数据库实例。进一步地,所述步骤2进一步具体为:定义注解类DS,其为RetentionPolicy.RUNTIME类型的注解,其在代码运行时解析,且只有一个属性用来定义数据源名称。进一步地,所述步骤3进一步具体为:设置切入点,使用spring提供的AbstractPointcutAdvisor接口实现切入点设置,实现切面逻辑;利用AnnotationMatchingPointcut类,实现匹配所有DS.class注解的类和方法;实现切面逻辑,作用在切入点匹配的类和方法上;获取DS注解的属性名称,也就是获取DS注解的方法和类要使用的数据库名称,并将数据库名称放在本地线程副本中。进一步地,所述步骤4进一步具体为:使用Spring提供的AbstractRoutingDataSource接口实现数据源的切换;其方法determineDataSource返回数据源实例,即从本地副本中获取当前方法使用的数据源的名称,并从数据源列表中获取对应的数据源实例。本专利技术具有如下优点:本专利技术是基于SpringBoot注解、Spring动态代理和切面编程技术,只需在特定类或者方法上注解,实现多数据源集成,数据源的动态切换等。该方法无需其他业务控制代码,即可实现高内聚低耦合,且性能不受影响;在此基础上通过配置可以实现数据库读写分离。附图说明下面参照附图结合实施例对本专利技术作进一步的说明。图1为本专利技术方法执行流程图。具体实施方式如图1所示,本专利技术依托SpringBoot的注解机制,设计一套注解,完成动态数据库链接池构造,并注入到Spring上下文中,动态数据源通过获取本地线程副本的数据源名称确定使用哪个数据源。同时通过切面编程原理实现在业务层通过注解,解析出调用方法上配置的数据源名称,并存储在本地线程副本中。数据源配置:application.yml是SpringBoot的默认配置文件,我们采用SpringBoot的风格配置Master-Slaves的数据库架构,支持多个Slave节点;初始化数据源:根据数据源配置项,不同的数据库地址,形成不同的数据库连接池,等待需要的时候调用;定义注解:自定义一套数据源切换的注解。用户只需要在类或者方法上使用注解,并通过注解属性选择需要使用的数据源,即可完成多数据源配置下,数据源的灵活切换;用户配置注解的过程其实就是设置需要代理的类和方法的过程;解析注解:使用AOP(切面编程技术),在方法运行时将用户注解在类或者方法上本文档来自技高网
...

【技术保护点】
1.一种实现数据库动态切换的方法,其特征在于:包括:步骤1、解析数据源配置文件,形成对应的数据库连接池;步骤2、定义一套数据源切换的注解;步骤3、解析注解,将数据库名称放在本地线程副本中;步骤4、将在线程副本中的数据库名称对应的数据库对象返回给Spring框架,实现数据库的动态切换。

【技术特征摘要】
1.一种实现数据库动态切换的方法,其特征在于:包括:步骤1、解析数据源配置文件,形成对应的数据库连接池;步骤2、定义一套数据源切换的注解;步骤3、解析注解,将数据库名称放在本地线程副本中;步骤4、将在线程副本中的数据库名称对应的数据库对象返回给Spring框架,实现数据库的动态切换。2.根据权利要求1所述的一种实现数据库动态切换的方法,其特征在于:所述步骤1进一步具体为:解析数据源配置文件,得到单个数据源配置对象;根据数据源配置文件创建数据源对象;最终生成一个存有数据库列表信息的Map对象,其中,key为数据库的名称,value为对应的数据库实例。3.根据权利要求1所述的一种实现数据库动态切换的方法,其特征在于:所述步骤2进一步具体为:定义注解类DS,其为RetentionPolicy.RUNTIME类型的注解,其在代码运行时解析,且只有一个属性用来定义数据源名称。4.根据权利要求1所述的一种实现数据库动态切换的方法,其特征在于:所述步骤3进一步具体为:设置切入点,使用spring提供的AbstractPointcutAdvisor接口实现切入点设置,实现切面逻辑;利用AnnotationMatchingPointcut类,实现匹配所有DS.class注解的类和方法;实现切面逻辑,作用在切入点匹配的类和方法上;获取DS注解的属性名称,也就是获取DS注解的方法和类要使用的数据库名称,并将数据库名称放在本地线程副本中。5.根据权利要求1所述的一种实现数据库动态切换的方法,其特征在于:所述步骤4进一步具体为:使用Spring提供的AbstractRoutingDataSource接口实现数据源的切换;其方法determineDataSource返回数据源实例,即从本地副本中获取当前方法使用的数据源的名称,并从数据源列表中获取对应的数据源实例。6.一种计...

【专利技术属性】
技术研发人员:陈光淙涂建群
申请(专利权)人:南威互联网科技集团有限公司
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1