CN112817799B - 一种基于Spring框架的访问多数据源的方法及装置 - Google Patents
一种基于Spring框架的访问多数据源的方法及装置 Download PDFInfo
- Publication number
- CN112817799B CN112817799B CN202110041267.5A CN202110041267A CN112817799B CN 112817799 B CN112817799 B CN 112817799B CN 202110041267 A CN202110041267 A CN 202110041267A CN 112817799 B CN112817799 B CN 112817799B
- Authority
- CN
- China
- Prior art keywords
- data source
- data
- identification information
- trusteeship
- access request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000013507 mapping Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 8
- 238000000926 separation method Methods 0.000 claims 1
- 238000012545 processing Methods 0.000 description 51
- 230000008520 organization Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/256—Integrating or interfacing systems involving database management systems in federated or virtual databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Spring框架的访问多数据源的方法及装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收和解析数据访问请求,其中,获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;在第一数据源连接中,确定与访问者标识信息对应的第二数据源的地址标识,其中,第二数据源是所述数据访问请求的目标数据源;通过预置数据源管理软件框架,获得第二数据源连接;在第二数据源连接中,确定并且执行与第二数据源的地址标识对应的数据操作命令。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于Spring框架的访问多数据源的方法及装置。
背景技术
随着单数据源模式中的数据量增加,对系统运行带来很大压力。例如在银行的托管系统的应用示例中,多个托管人之间的业务没有紧密的联系,该业务场景适合数据库分库,以此来分担数据库的压力,缓解数据量增加带来的性能问题。
在现有技术在,已知有ShardingSphere的分库分表方案。但是,该方案主要面向MySQL,对Oracle数据库的支持不完善,而且对复杂查询的支持不充分。
此外,还已知有基于Spring的DynamicDatasource多数据源方案。但是该配置方案目前无法实现针对不同托管人配置不同数据源。
发明内容
有鉴于此,本发明实施例提供一种基于Spring框架的访问多数据源的方法及装置。本发明特别是对基于Spring的DynamicDatasource多数据源方案进行了改进,其中,增加了动态选择可用的默认数据源。由此确保了高可用性,特别是当一个数据库出现问题时,动态地选择另外的可用的数据源作为默认数据源进行启动,不会影响整个系的数据访问操作。
为实现上述目的,根据本发明实施例的一个方面,提供了一种基于Spring框架的访问多数据源的方法,包括:
接收和解析数据访问请求,其中,获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;
在第一数据源连接中,确定与访问者标识信息对应的第二数据源的地址标识,其中,第二数据源是所述数据访问请求的目标数据源;
通过预置数据源管理软件框架,获得第二数据源连接;
在第二数据源连接中,确定并且执行与第二数据源的地址标识对应的数据操作命令。
可选地,以如下方式选定第一数据源:检测已经设置好的数据源是否可用,如果该数据源不可用,则获取所有数据源并且遍历检测所有数据源的可用性,直至找到一个可用的数据源,并且将该数据源作为第一数据源。由此,实现了动态选择第一数据源,即默认数据源。
可选地,通过访问者标识信息与目标数据源的地址标识的映射关系来确定与访问者标识信息对应的第二数据源的地址标识。由此,简单地将建立了数据访问请求中的访问者与第二数据源,即目标数据源,的对应关系。
可选地,将所述映射关系存储在第一数据源和第二数据源中。由此,确保了在建立了任意的数据源连接的情况下,都可以获得所述映射关系。
可选地,多个访问者标识信息配属于同一数据源的地址标识。当配属于该访问者的数据量较少时,这样的分库方案时有利的。
可选地,每个访问者标识信息均配属于不同数据源的地址标识。当配属于该访问者的数据量较多时,这样的分库方案时有利的。
可选地,在通过预置数据源管理软件框架获得第一数据源连接或第二数据源连接中,将第一数据源或第二数据源的地址标识设置到与所述数据访问请求对应的线程局部变量中。线程局部变量是指ThreadLocal,可以于各个线程内为线程内的每个变量都创建一个副本变量,每个线程可以访问自己内部的副本变量,而不会对其它线程的副本变量造成影响。由此,不同线程切换数据源不会相互影响,即避免了并发干扰。
可选地,在第二数据源连接中执行所述数据操作命令的同时能够进行的是:接收和解析另外的数据访问请求,其中,获取与另外的数据访问请求关联的另外的访问者标识信息和配属于另外的访问者标识信息的数据操作命令;通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;在第一数据源连接中,确定与另外的访问者标识信息对应的第三数据源的地址标识,其中,第三数据源是另外的数据访问请求的目标数据源;通过预置数据源管理软件框架,获得第三数据源连接;在第三数据源中,确定并且执行与第三数据源的地址标识对应的数据操作命令。由此,以异步工作方式实现了访问多数据源。
在异步工作方式下,同样可选地设置的是:通过访问者标识信息与目标数据源的地址标识的映射关系来确定与访问者标识信息对应的第三数据源的地址标识。由此,简单地将建立了数据访问请求中的访问者与第三数据源,即另外的目标数据源,的对应关系。
可选地,将所述映射关系存储在第一数据源、第二数据源和第三数据源中。由此,确保了在异步工作方式下建立了任意的数据源连接的情况下,都可以获得所述映射关系。
在异步工作方式下,同样可选地是:多个访问者标识信息配属于同一数据源的地址标识,或者每个访问者标识信息均配属于不同数据源的地址标识。
根据本发明实施例的第二方面,提供一种基于Spring框架的访问多数据源的装置,其特征在于,包括:
访问请求接收和解析模块,用于获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
地址标识确定模块,用于确定与访问者标识信息对应的数据源的地址标识;
操作命令确定模块,用于确定与所述数据源的地址标识对应的操作命令;
数据库连接获得模块,用于通过预置数据源管理软件框架获得与所述数据源的地址标识对应的数据源的连接;
访问请求执行模块,用于执行所述数据操作命令;
其中,所述装置用于执行根据前述实施方式中的任一个所述的方法。
特别地,针对根据本发明基于Spring框架的访问多数据源的方法所阐述的优点也能转移到根据本发明的基于Spring框架的访问多数据源的装置上。
可选地,由地址标识确定模块以如下方式选定第一数据源:检测已经设置好的数据源是否可用,如果该数据源不可用,则获取所有数据源并且遍历检测所有数据源的可用性,直至找到一个可用的数据源,并且将该数据源作为第一数据源。
可选地,通过访问者标识信息与目标数据源的地址标识的映射关系,由地址标识确定模块来确定与访问者标识信息对应的第二数据源的地址标识。
可选地,通过存储在第一数据源和第二数据源中的上述映射关系,由地址标识确定模块来确定与访问者标识信息对应的第二数据源的地址标识。
可选地,在第二数据源连接中执行所述数据操作命令的同时,在根据本发明的装置中能够进行的是:接收和解析另外的数据访问请求,其中,获取与另外的数据访问请求关联的另外的访问者标识信息和配属于另外的访问者标识信息的数据操作命令;通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;在第一数据源连接中,确定与另外的访问者标识信息对应的第三数据源的地址标识,其中,第三数据源是另外的数据访问请求的目标数据源;通过预置数据源管理软件框架,获得第三数据源连接;在第三数据源中,确定并且执行与第三数据源的地址标识对应的数据操作命令。
根据本发明实施例的第三方面,提供一种基于Spring框架的访问多数据源的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一方面提供的方法。
本发明的实施例具有如下优点或有益效果:增加了动态选择可用的默认数据源,确保了高可用性,特别是当一个数据库出现问题时,动态地选择另外的可用的数据源作为默认数据源进行启动,不会影响整个系的数据访问操作。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的基于Spring框架的访问多数据源的方法的应用环境的示意图;
图2是根据本发明实施例的基于Spring框架的访问多数据源的方法的主要流程的示意图;
图3是根据本发明实施例的基于Spring框架的访问多数据源的装置的主要模块的示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1示出了根据本发明实施例的基于Spring框架的访问多数据源的方法的应用环境。
图1示出了银行的托管系统的应用示例,具体而言示出了联机交易处理流程。在托管系统中,通过页面的url访问生成交易号。随着联机交易专递到后台Servlet的还有xml交易报文。交易报文内是标准格式的请求参数,请求参数包括报文头和报文正文。报文头包含公共信息,例如交易号、机构编号、员工编号、岗位编号等。每个员工访问后台的公共信息格式相同,内容也所不同。在托管系统中,不同机构的员工传到后台的机构编号不同,其中机构编号和托管人编号是一一对应的,根据这个机构编号可以查得托管人编号。
联机交易进入后台首先被传送给Servlet,每个交易都是一个独立的线程,Servlet将交易报文转成对象,传递给处理栈,处理栈是能配置化的。处理栈被划分成多级处理栈,每一级处理栈分别执行不同重要级别的任务,处理栈执行各自的任务后都会返回上级处理栈。之后执行拦截器,然后到达服务层(Service),每个服务层里面的方法是所传送的交易号实际对应执行的业务逻辑处理。服务层里面会引用相当于DAO的dos,但是托管框架将DAO单独封装成了一层。
最后服务层返回对象给上层,上层解析成报文返回给前台。
示例性的,单数据源联机交易访问流程如下:
1.由前台客户端访问后台Servlet,Servlet将前台的报文解析后传递给处理栈,
2.处理栈是能动态配置的,每个处理栈执行各自的任务,处理栈的调用存在先后顺序,将按照配置文件从上到下依次执行,每个处理栈执行完毕后返回到上级处理栈中;
3.处理栈执行完毕后,进行实际的交易事务处理,例如调用交易流水将其保存至交易操作日志,此时可选地能够增加其他的交易事务处理;
4.在交易事务处理的类中,调用服务层执行具体的交易逻辑;
5.在服务层可以调用dos对数据库进行操作;
6.每个层级执行完毕都会返回到上级执行,直到返回交易事务处理的报文给前台客户端。
上述的单数据源联机交易的处理性能会随着数据量的增加而急速降低,而使用多数据源的方案可以使得托管系统能够根据特定规则将数据指定到对应的数据源上,分担数据库的压力,缓解数据量增加带来的性能问题。
根据本发明的构思,由于多个托管人之间的业务并没有紧密的联系,因此设计了一种依据托管人编号对数据库进行分库隔离的策略。由此,根据托管人的业务数据的多少来管理各个托管人的数据源:当单一托管人的业务数据量较少时,配置多个托管人对应于同一数据源;当单一托管人业务数据量较大时,配置一个托管人对应一个数据源。优选地,上述的两种分库隔离的策略可以根据业务数据量的变化,灵活地进行调换。
上述的单数据源联机交易的示例中,由于在处理栈中没有数据库操作,而在处理栈之后存在交易事务处理,例如保存交易流水,的数据库操作,而且切换数据源必须在交易事务处理之前生效。根据本发明,将切换数据源的操作添加到处理栈的最后一个步骤中,具体处理逻辑如下:
1.由前台客户端访问后台Servlet,Servlet将前台的报文解析后传递给处理栈;
2.处理栈是能动态配置的,每个处理栈执行各自的任务,处理栈的调用存在先后顺序,将按照配置文件从上到下依次执行,每个处理栈执行完毕后返回到上级处理栈中,由最后一个处理栈执行切换数据源操作;
3.处理栈执行完毕后,进行实际的交易事务处理,例如调用交易流水将其保存至交易操作日志,此时可选地能够增加其他的交易事务处理;
4.在交易事务处理的类中,调用服务层执行具体的交易逻辑;
5.在服务层可以调用dos对数据库进行操作;
6.每个层级执行完毕都会返回到上级执行,直到返回交易事务处理的报文给前台客户端。
示例性的切换数据源的处理流程为:
1.首先对由后台Servlet解析的报文进行非空检查;
2.获取报文中的机构编号这一参数,由于报文中没有托管人编号这一参数,所以需要根据机构编号获知/查询托管人编号,根据本发明优选地是,在每个数据库中都存储有机构编号和托管人编号的映射表,以便确保系统连接至所有数据库后都建立机构编号和托管人编号的映射关系;
3.选择一个可用的默认库(默认数据源)查询机构编号和托管人编号的映射关系;
4.根据机构编号查询到托管人编号后,设置对应于该托管人编号的数据源,优选地,托管人编号和数据源的对应关系维护在一个配置文件中,这样是为了快速读取和设置数据源,不受数据库的影响,其中,调用线程安全的方法设置目标数据源,因此并发不会相互影响;
5.在目标数据源设置完成后,调用回调函数执行后续的业务逻辑处理;
6.在业务逻辑处理完成后,返回到该处理链中,其中,最后清理掉切换后的数据源,防止内存泄漏。
在根据本发明的依据托管人编号对数据库进行分库的托管系统中,在通过上述方式进行数据源切换的情况下,不管是实际的交易事务处理,例如交易流水记录,还是服务层中的数据库操作,都是在特定的数据库中进行,在此期间不会切换到到其他数据库。因此,确保了数据的准确和安全。
根据本发明,联机交易切换数据源采用了增加处理栈的方式,动态可插拔,确保了框架层中的对交易流水号等进行前置数据库操作时,数据源就已切换,避免在交易事务内部切换数据源而导致切换失败。
此外,对于所有库都要执行的操作,采用了回调函数的机制,反射获取所有数据源,在每个数据源上执行操作,并且压制异常,使得数据源执行的结果不会相互影响。
根据本发明的一个实施方案,还能够实现异步工作方式的多数据源访问。在多数据源设计中,一个数据源对应一个任务引擎线程,该线程只处理对应本数据源的任务队列,在例如Spring中配置多个任务调度引擎,每个调度引擎固定地设置一个数据源,执行过程中不再切换数据源。
优选地,数据库配置中,为每个任务配设唯一的任务编号。更优选地,为了使不同托管人的任务有所区分,为每个任务编号增加托管人编号的前缀。由于根据本发明是依据托管人编号对数据库进行分库,因此只有在与托管人编号对应的数据源上才能配置该托管人的任务。
异步任务的数据源和执行任务processor的数据源并不相同,在processor执行时,业务逻辑会自行切换至对应的数据源,由此实现了松耦合。
此外,在定时任务的情况下,每个数据源对应一个固定的定时调度,定时调度查询出可执行的任务后,保存到对应的数据库的任务队列中,在当前任务执行过程中也不切换数据源。
优选地,定时任务生成的任务没有参数,即报文经解析后的不存在托管人编号,通过获取任务编号之前的托管人编号前缀,也可以获知托管人编号。由此,可以根据任务参数(即托管人编号)切换数据源,也可以根据任务编号前缀切换数据源,确保了联机交易的任务和定时生成的任务的顺利运行。
联机交易提交的异步任务示例性的流程为:
1.获取机构编号;
2.根据机构编号查询与目标数据库对应的托管人编号,并设置到SystemContext里面的线程变量中,这个线程变量是线程安全的,并发不会影响;
3.切换数据源;
4.将托管人编号设置到任务参数中,保存任务到对应数据源的任务队列;
5.清理SystemContext的托管人编号,清理shardingManager的数据源,以避免内存溢出。
其中,异步任务切换数据源的示例性流程为:
1.设置引擎参数;
2.新增一个中间层,以用于在其中执行数据源切换;
3.查询任务参数,获取托管人编号,如果存在托管人编号,直接切换数据源;如果是定时任务生成的任务队列,通过任务编号的前缀获知托管人编号,随后切换数据源;
5.执行的业务逻辑处理;
6.清理SystemContext的托管人编号,清理shardingManager的数据源,以避免内存溢出。
根据本发明,对单数据源系统的异步任务进行了多数据源改造,其中,每个任务引擎配套设置一个数据源,且与processor执行业务逻辑的数据源隔离,实现了松耦合。
图2是根据本发明实施例的基于Spring框架的访问多数据源的方法的主要流程的示意图。
如图2所示,本发明实施例的基于Spring框架的访问多数据源的方法主要包括以下步骤:
步骤S201:接收和解析数据访问请求,其中,获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
步骤S202:通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;
步骤S203:在第一数据源连接中,确定与访问者标识信息对应的第二数据源的地址标识,其中,第二数据源是所述数据访问请求的目标数据源;
步骤S204:通过预置数据源管理软件框架,获得第二数据源连接;
步骤S205:在第二数据源连接中,确定并且执行与第二数据源的地址标识对应的数据操作命令。
在步骤S201中,优选地通过后台Servlet接收报文并且解析报文,特别是获知访问者标识信息和配属于该访问者标识信息的数据操作命令。数据访问请求例如是与交易相关的报文,访问者标识信息例如是机构编号、员工编号、岗位编号等,配属于该访问者标识信息的数据操作命令例如是交易任务。
在步骤S202中,动态选择作为可用的默认数据源的第一数据源,即进行项目启动配置。
在本发明中,项目启动配置优选地使用了Spring框架提供的抽象类AbstractRoutingDataSource。子类DynamicDataSource继承Spring自带的抽象类AbstractRoutingDataSource,该抽象类启动加载时会调用afterPropertiesSet()方法设置默认数据源。DetermineTargetDataSource()方法是在真正执行SQL操作时才会调用的方法,在该方法中动态切换数据源。DeterminCurrentLookupKey()方法是抽象方法,这个方法决定具体使用哪个数据源,如果该方法返回空,则使用默认数据源。
子类DynamicDataSource中,实现了determineCurrentLookupKey方法,该方法返回数据源名称,其中使用了DynamicDataSourceHolder类的getDataSource方法获取数据源名称,数据源名称是存到contextHolder线程变量中,因此是线程安全的,不同线程切换数据源不会相互影响。在checkConnectionValid方法中检测某一数据源的可用性,具体实现就是执行数据库查询,如果查询成功,则该数据源可用,否则不可用。由于抽象类AbstractRoutingDataSource没有获取配置文件中的数据源和默认数据源的方法,所以在子类DynamicDataSource中增加getTargetDataSources方法,通过反射的方式获取配置文件中配置的数据源,getDefaultTargetDataSource方法通过反射的方式获取默认数据源,setResolvedDefaultDataSource方法通过反射方式设置默认数据源。
为了确保当某个数据库出现问题时仍能够正常启动数据源访问,所以配置默认数据源需要动态选择,如果当前的默认数据源异常,动态切换到下一个数据源,直到找到一个可用的数据源为止。然而在Spring自带的抽象类AbstractRoutingDataSource中,只能固定设置默认数据源。
本发明在子类DynamicDataSource中重写了afterPropertiesSet(),在其中设置有动态选择默认数据源的操作。具体实现如下:首先,获取已经设置好的数据源,紧接着检测该数据源是否可用。如果该数据源不可用,则获取所有数据源,遍历经检测的数据源的可用性,直到找到一个可用的数据源,最终返回该数据源;随后,调用setResolvedDefaultDataSource方法设置当前可用的数据源作为默认数据源。
当设置完毕默认数据源后,启动时需要处理的数据库操作就会在默认数据源中执行。但是某些交易操作需要在所有数据源中都执行,比如清理交易记录流水表,清理业务锁等,所以针对这些交易操作需要采用回调函数的方式在每个数据源中循环执行。在DynamicDataSourceHolder类中设置有静态变量datasourceMap用于存放系统配置的所有数据源,获取的方式是getDatasourceMap函数,在该函数中使用DynamicDataSource.getTargetDataSources()方法获取所有数据源,并缓存到datasourceMap中。然后DynamicDataSourceHolder类利用handleEachDatasource方法执行回调函数IMultiCallback,在该方法中循环所有数据源,执行multicallback.execute方法,为了各个数据源不相互影响,仅记录multicallback.execute方法的异常但是不再向外抛出。
在对基于Spring的多数据源配置进行如上改造后,在单数据源出现问题时仍可以正常启动数据源访问。
在步骤S203中,在可用的默认数据源中,例如查询机构编号和托管人编号的映射表,从而获知该托管人编号对应的数据源的地址标识。根据本发明,优选地在每个数据源中都存储有相同的映射表,以便确保无论以哪个数据源作为默认数据源来启动时,都能建立机构编号和托管人编号的映射关系。
在步骤S204中,切换至已获知的托管人编号对应的数据源,即该数据访问请求的目标数据源,其中,优选地参考上文所述的示例性的切换数据源的处理流程。
在步骤S205中,确定对已获知的托管人要进行的数据操作命令,并且在该数据访问请求的目标数据源中,执行处理任务。
图3是根据本发明实施例的基于Spring框架的访问多数据源的装置的主要模块的示意图。
如图3所示,本发明实施例的一种基于Spring框架的访问多数据源的装置300,包括:
访问请求接收和解析模块301,用于获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
地址标识确定模块302,用于确定与访问者标识信息对应的数据源的地址标识;
操作命令确定模块303,用于确定与所述数据源的地址标识对应的操作命令;
数据库连接获得模块304,用于通过预置数据源管理软件框架获得与所述数据源的地址标识对应的数据源的连接;
访问请求执行模块305,用于执行所述数据操作命令;
其中,所述装置用于执行根据前述实施方式中的任一个所述的方法。
在一个实施例中,由地址标识确定模块302以如下方式选定第一数据源:检测已经设置好的数据源是否可用,如果该数据源不可用,则获取所有数据源并且遍历检测所有数据源的可用性,直至找到一个可用的数据源,并且将该数据源作为第一数据源。
在一个实施例中,通过访问者标识信息与目标数据源的地址标识的映射关系,由地址标识确定模块302来确定与访问者标识信息对应的第二数据源的地址标识。
在一个实施例中,通过存储在第一数据源和第二数据源中的上述映射关系,由地址标识确定模块302来确定与访问者标识信息对应的第二数据源的地址标识。
可选地,在第二数据源连接中执行所述数据操作命令的同时,在根据本发明的装置300中能够进行的是:接收和解析另外的数据访问请求,其中,获取与另外的数据访问请求关联的另外的访问者标识信息和配属于另外的访问者标识信息的数据操作命令;通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;在第一数据源连接中,确定与另外的访问者标识信息对应的第三数据源的地址标识,其中,第三数据源是另外的数据访问请求的目标数据源;通过预置数据源管理软件框架,获得第三数据源连接;在第三数据源中,确定并且执行与第三数据源的地址标识对应的数据操作命令。
图4示出了可以应用本发明实施例的一种基于Spring框架的访问多数据源的方法或一种基于Spring框架的访问多数据源的装置的示例性系统架构400。
如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息操作请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息)反馈给终端设备。
需要说明的是,本发明实施例所提供的基于Spring框架的访问多数据源的方法一般由服务器405执行,相应地,基于Spring框架的访问多数据源的装置一般设置于服务器405中。
应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图5,其示出了适于用来实现本发明实施例的终端设备的计算机系统500的结构示意图。图5示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括:访问请求接收和解析模块,用于获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;地址标识确定模块,用于确定与访问者标识信息对应的数据源的地址标识;操作命令确定模块,用于确定与所述数据源的地址标识对应的操作命令;数据库连接获得模块,用于通过预置数据源管理软件框架获得与所述数据源的地址标识对应的数据源的连接;访问请求执行模块,用于执行所述数据操作命令。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收和解析数据访问请求,其中,获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;在第一数据源连接中,确定与访问者标识信息对应的第二数据源的地址标识,其中,第二数据源是所述数据访问请求的目标数据源;通过预置数据源管理软件框架,获得第二数据源连接;在第二数据源连接中,确定并且执行与第二数据源的地址标识对应的数据操作命令。
根据本发明实施例的技术方案,对基于Spring的DynamicDatasource多数据源方案进行了改进,其中,增加了动态选择可用的默认数据源。由此确保了高可用性,特别是当一个数据库出现问题时,动态地选择另外的可用的数据源作为默认数据源进行启动,不会影响整个系的数据访问操作。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (15)
1.一种基于Spring框架的访问多数据源的方法,其特征在于,应用于银行托管系统,包括:
接收和解析数据访问请求,其中,获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;
在第一数据源连接中,确定与访问者标识信息对应的第二数据源的地址标识,其中,第二数据源是所述数据访问请求的目标数据源;
通过预置数据源管理软件框架,获得第二数据源连接;
在第二数据源连接中,确定并且执行与第二数据源的地址标识对应的数据操作命令;
其中,所述访问者标识信息为托管人编号,所述托管人编号和数据源的对应关系维护于一个配置文件中;
所述方法,还包括:依据托管人编号对数据库进行分库隔离;根据各个托管人的业务数据量来确定各个托管人的目标数据源,当单一托管人的业务数据量较少时,配置多个托管人对应于同一数据源;当单一托管人业务数据量较大时,配置一个托管人对应一个数据源。
2.如权利要求1所述的方法,其特征在于,以如下方式选定第一数据源:检测已经设置好的数据源是否可用,如果该数据源不可用,则获取所有数据源并且遍历检测所有数据源的可用性,直至找到一个可用的数据源,并且将该数据源作为第一数据源。
3.如权利要求1所述的方法,其特征在于,通过访问者标识信息与目标数据源的地址标识的映射关系来确定与访问者标识信息对应的第二数据源的地址标识。
4.如权利要求3所述的方法,其特征在于,将所述映射关系存储在第一数据源和第二数据源中。
5.如权利要求3所述的方法,其特征在于,多个访问者标识信息配属于同一数据源的地址标识。
6.如权利要求3所述的方法,其特征在于,每个访问者标识信息均配属于不同数据源的地址标识。
7.如权利要求1所述的方法,其特征在于,在通过预置数据源管理软件框架获得第一数据源连接或第二数据源连接中,将第一数据源或第二数据源的地址标识设置到与所述数据访问请求对应的线程局部变量中。
8.如权利要求1所述的方法,其特征在于,在第二数据源连接中执行所述数据操作命令的同时,
接收和解析另外的数据访问请求,其中,获取与另外的数据访问请求关联的另外的访问者标识信息和配属于另外的访问者标识信息的数据操作命令;
通过预置数据源管理软件框架,动态地获得第一数据源连接,其中,将可用的数据源选定为第一数据源;
在第一数据源连接中,确定与另外的访问者标识信息对应的第三数据源的地址标识,其中,第三数据源是另外的数据访问请求的目标数据源;
通过预置数据源管理软件框架,获得第三数据源连接;
在第三数据源中,确定并且执行与第三数据源的地址标识对应的数据操作命令。
9.如权利要求8所述的方法,其特征在于,通过访问者标识信息与目标数据源的地址标识的映射关系来确定与访问者标识信息对应的第三数据源的地址标识。
10.如权利要求9所述的方法,其特征在于,将所述映射关系存储在第一数据源、第二数据源和第三数据源中。
11.如权利要求9所述的方法,其特征在于,多个访问者标识信息配属于同一数据源的地址标识。
12.如权利要求9所述的方法,其特征在于,每个访问者标识信息均配属于不同数据源的地址标识。
13.一种基于Spring框架的访问多数据源的装置,其特征在于,应用于银行托管系统,包括:
访问请求接收和解析模块,用于获取与数据访问请求关联的访问者标识信息和配属于该访问者标识信息的数据操作命令;
地址标识确定模块,用于确定与访问者标识信息对应的数据源的地址标识;
操作命令确定模块,用于确定与所述数据源的地址标识对应的操作命令;
数据库连接获得模块,用于通过预置数据源管理软件框架获得与所述数据源的地址标识对应的数据源的连接;
访问请求执行模块,用于执行所述数据操作命令;
其中,所述装置用于执行根据权利要求1至12中任一项所述的方法;
其中,所述访问者标识信息为托管人编号;所述托管人编号和数据源的对应关系维护于一个配置文件中;所述装置还用于依据托管人编号对数据库进行分库隔离;根据各个托管人的业务数据量来确定各个托管人的目标数据源;当单一托管人的业务数据量较少时,配置多个托管人对应于同一数据源;当单一托管人业务数据量较大时,配置一个托管人对应一个数据源。
14.一种基于Spring框架的访问多数据源的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-12中任一所述的方法。
15.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-12中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110041267.5A CN112817799B (zh) | 2021-01-13 | 2021-01-13 | 一种基于Spring框架的访问多数据源的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110041267.5A CN112817799B (zh) | 2021-01-13 | 2021-01-13 | 一种基于Spring框架的访问多数据源的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112817799A CN112817799A (zh) | 2021-05-18 |
CN112817799B true CN112817799B (zh) | 2024-08-09 |
Family
ID=75869463
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110041267.5A Active CN112817799B (zh) | 2021-01-13 | 2021-01-13 | 一种基于Spring框架的访问多数据源的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112817799B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114490769A (zh) * | 2022-01-28 | 2022-05-13 | 国泰新点软件股份有限公司 | 数据库事务管理方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309785A (zh) * | 2020-02-14 | 2020-06-19 | 广州极晟网络技术有限公司 | 基于Spring框架的数据库访问方法、装置、计算机设备和介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4628149B2 (ja) * | 2005-03-14 | 2011-02-09 | 株式会社エヌ・ティ・ティ・ドコモ | アクセス制御装置及びアクセス制御方法 |
CN101408899B (zh) * | 2008-11-21 | 2010-09-29 | 北京中企开源信息技术有限公司 | 一种网站多数据源切换方法和装置 |
US10621372B2 (en) * | 2012-05-03 | 2020-04-14 | Salesforce.Com, Inc. | Method and system for generating database access objects |
CN103207908B (zh) * | 2013-03-29 | 2017-02-22 | 成都康赛信息技术有限公司 | 多数据源动态隔离访问方法 |
CN107122365A (zh) * | 2016-02-25 | 2017-09-01 | 阿里巴巴集团控股有限公司 | 异构数据库的访问方法及装置 |
CN108667930B (zh) * | 2018-05-09 | 2020-10-30 | 聚龙股份有限公司 | 一种动态数据源配置与自动化切换方法 |
CN111414391A (zh) * | 2020-03-25 | 2020-07-14 | 平安资产管理有限责任公司 | 一种访问多数据源的方法及系统 |
-
2021
- 2021-01-13 CN CN202110041267.5A patent/CN112817799B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309785A (zh) * | 2020-02-14 | 2020-06-19 | 广州极晟网络技术有限公司 | 基于Spring框架的数据库访问方法、装置、计算机设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112817799A (zh) | 2021-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11615087B2 (en) | Search time estimate in a data intake and query system | |
US11580107B2 (en) | Bucket data distribution for exporting data to worker nodes | |
US11586627B2 (en) | Partitioning and reducing records at ingest of a worker node | |
US11599541B2 (en) | Determining records generated by a processing task of a query | |
US12007996B2 (en) | Management of distributed computing framework components | |
US11593377B2 (en) | Assigning processing tasks in a data intake and query system | |
US20220327125A1 (en) | Query scheduling based on a query-resource allocation and resource availability | |
US11921672B2 (en) | Query execution at a remote heterogeneous data store of a data fabric service | |
US11442935B2 (en) | Determining a record generation estimate of a processing task | |
US20190258636A1 (en) | Record expansion and reduction based on a processing task in a data intake and query system | |
CN110825535B (zh) | 一种作业调度的方法和系统 | |
US20120254221A1 (en) | Systems and methods for performing record actions in a multi-tenant database and application system | |
CN110928853A (zh) | 一种标识日志的方法和装置 | |
CN112860744A (zh) | 一种业务流程处理方法和装置 | |
CN113076153A (zh) | 一种接口调用方法和装置 | |
CN112445860B (zh) | 一种处理分布式事务的方法和装置 | |
US11182144B2 (en) | Preventing database package updates to fail customer requests and cause data corruptions | |
CN111401684A (zh) | 一种任务处理的方法和装置 | |
CN112817799B (zh) | 一种基于Spring框架的访问多数据源的方法及装置 | |
CN116303620A (zh) | 基于轻型数据库的对账方法、系统、设备、介质及产品 | |
CN112148705A (zh) | 数据迁移的方法和装置 | |
US11023672B1 (en) | Dynamic service injection | |
US8799318B2 (en) | Function module leveraging fuzzy search capability | |
CN113704242A (zh) | 一种数据处理方法和装置 | |
CN112988806A (zh) | 一种数据处理的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |