CN104991824B - 一种动态切换应用程序数据源的方法及系统 - Google Patents

一种动态切换应用程序数据源的方法及系统 Download PDF

Info

Publication number
CN104991824B
CN104991824B CN201510469431.7A CN201510469431A CN104991824B CN 104991824 B CN104991824 B CN 104991824B CN 201510469431 A CN201510469431 A CN 201510469431A CN 104991824 B CN104991824 B CN 104991824B
Authority
CN
China
Prior art keywords
data source
switching
source
data
application
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
Application number
CN201510469431.7A
Other languages
English (en)
Other versions
CN104991824A (zh
Inventor
邱光明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Happy Bubble Information Technology Co ltd
Original Assignee
Shanghai Feixun Data Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201510469431.7A priority Critical patent/CN104991824B/zh
Publication of CN104991824A publication Critical patent/CN104991824A/zh
Application granted granted Critical
Publication of CN104991824B publication Critical patent/CN104991824B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供一种动态切换应用程序数据源的方法及系统,包括:在应用程序中配置多个数据源信息,启动应用程序时,加载配置项;为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;在应用程序需要切换数据源的功能模块中加入切换点;当应用程序调用所述功能模块时,根据功能模块对应配置项中的数据源信息,向连接池请求数据源,切换连接到相应的数据源。通过为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源,解决了用户访问过多造成的连接争抢问题。

Description

一种动态切换应用程序数据源的方法及系统
技术领域
本发明涉及切换应用程序数据源,尤其涉及一种动态切换应用程序数据源的方法及系统。
背景技术
如今的应用程序往往需要操作多个不同的数据库或者接入其他不同的数据库中,迫使程序员不得不修改代码甚至框架来兼容其业务需求。Spring动态切换数据源技术可以实现应用程序数据库的动态切换,但存在问题:没有能够解决多用户访问单例“sessionFactory”时共享“dataSource”(数据源)变量,导致产生争抢“dataSource”(数据源),当多用户访问时,可能会导致系统性能下降。
发明内容
本发明的目的,就是提出一种动态切换应用程序数据源的方法及系统,
本发明为解决上述技术问题所采用的技术方案:
一种动态切换应用程序数据源的方法,其特征在于,包括:
在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项;为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;
在应用程序需要切换数据源的功能模块中加入切换点,所述切换点对应一数据源;
当应用程序调用所述功能模块时,根据所述切换点对应配置项中的数据源信息,向连接池请求数据源,切换连接到相应的数据源。
通过为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源,解决了用户访问过多造成的连接争抢问题。
优选的,
增加一数据源时,添加相应配置数据源信息,为新增数据源启动一个连接池的线程;
数据源可以根据需要增加或删除。
减少一数据数据源时,关掉相应线程。
优选的,
所述功能模块是需要切换数据源的方法。
优选的,
所述功能模块是配置文件中配置需要切换数据源的类。
在应用程序中需要切换数据源的方法或配置文件中配置需要切换数据源的类中加入切换点,所述切换点对应一数据源,当调用该方法或该类时,切换到相应的数据源,操作相应的数据源。
本发明还提供一种动态切换应用程序数据源的系统,包括:
配置数据源模块,在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项;
数据库连接模块,为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;
切换点设置模块,在应用程序需要切换数据源的功能模块中加入切换点,所述切换点对应一数据源;
当应用程序调用切换点设置模块中的所述功能模块时,根据功能模块对应配置数据源模块的数据源信息,向数据库连接模块的连接池请求数据源,切换连接到相应的数据源。
优选的,
还包括:
数据源添加删除模块,用于增加一数据源时,添加相应配置数据源信息,为新增数据源启动一个连接池的线程;减少一数据数据源时,用于关掉相应线程。
优选的,
所述功能模块是需要切换数据源的方法。
优选的,
所述功能模块是配置文件中配置需要切换数据源的类。
本发明通过为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源的方式实现动态切换应用程序的数据源,解决了用户访问过多造成的连接争抢问题。
附图说明
图1为一种动态切换应用程序数据源的方法的连接池与线程池关系示意图。
图2为一种动态切换应用程序数据源的方法的应用程序切换到数据源的示意图。
图3为一种动态切换应用程序数据源的系统的结构示意图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
实施例一:
线程池的原理类似于操作系统中的缓冲区,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态,线程池的应用会节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程创建与销毁。
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。
连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器的服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
现在应用程序操作多个不同的数据源时,为多个数据源建立连接池时只对应一个线程,会出现用户访问过多造成的连接争抢问题。
本发明提供一种动态切换应用程序数据源的方法,在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项。
在spring的配置文件配置多个数据源,包括数据源所在服务器IP地址、数据源标识、用户名、密码等信息,
如图1所示,为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源,这样,可以防止后续用户访问过多造成的连接争抢,当需要再添加一个数据源时,只需添加相应配置,再启动一个线程即可;反之,如果后续不需要使用某个数据库,只需关掉该线程,整个过程都不用重启应用程序。
如图2所示,在应用程序需要切换数据源的功能模块中加入切换点,切换点对应一数据源。在需要切换数据源的方法中加入切换点,切换点对应一数据源,或者在配置文件中配置需要切换数据源的整个类,加以监听。
当应用程序调用所述功能模块时,根据功能模块对应配置项中的数据源信息,向连接池请求数据源,切换连接到相应的数据源。
当应用程序在调用该方法或该类时,自动切换到需要操作的数据源中,再进行数据库操作,即完成动态切换数据库的目的。
切换点注入,采用java反射机制,找出该注入点对应的类名及方法名,在调用该方法时切换到需要操作的数据源,然后再继续执行该方法,以达到切换操作数据库的目的。
数据源切换,利用java技术中抽象数据源路由类AbstractRoutingDataSource,实现该类的方法determineCurrentLookupKey(),指定参数,便可路由到想要操作的数据库。
该发明中为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源,是单独通用的功能模块,可移植到其他第三方应用程序中,其他应用程序只需连接上连接池,配置好对应切换点,即可动态切换数据源的功能。
如图3所示,本发明提供一种动态切换应用程序数据源的系统,包括:
配置数据源模块,在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项;
数据库连接模块,为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;
切换点设置模块,在应用程序需要切换数据源的功能模块中加入切换点,所述切换点对应一数据源;
当应用程序调用切换点设置模块中的所述功能模块时,根据功能模块对应配置数据源模块的数据源信息,向数据库连接模块的连接池请求数据源,切换连接到相应的数据源。
功能模块是需要切换数据源的方法或者配置文件中配置需要切换数据源的类。
在应用程序使用中,可能需要再增加会删除数据库,系统还可以包括:
数据源添加删除模块,用于增加一数据源时,添加相应配置数据源信息,为新增数据源启动一个连接池的线程;减少一数据数据源时,用于关掉相应线程。
数据库连接模块中为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源,数据库连接模块是单独通用的功能模块,可移植到其他第三方应用程序中。
实施例二:
本实施例与实施例一基本相同,具体介绍应用程序操作多个不同的数据源的方法。
在spring的配置文件配置多个不同数据源A、B…N,配置信息包括多个不同数据源所在服务器IP地址、数据源标识、用户名、密码等信息,如图1所示,为多个数据源建立连接池,为每个数据源建立一个连接池的独立线程,为数据源A建立线程A,数据源B建立线程B…数据源N建立线程N,单个线程操作单个数据源,在应用程序存在需要切换数据源的多个方法,方法A、方法B…方法N,在多个方法中中加入切换点A、切换点B…切换点N,切换点A对应数据源A,切换点B对应数据源B…切换点N对应数据源N,也可以存在两个以上方法中的切换点对应一相同数据源。
程序运行中,通过线程A连接到数据源A,当应用程序调用方法B时,根据切换点B对应配置项中的数据源B的信息,利用java技术中抽象数据源路由类AbstractRoutingDataSource,实现该类的方法determineCurrentLookupKey(),指定参数,通过线程B切换到切换点B对应的数据源B。
当应用程序调用方法N时,根据切换点N对应配置项中的数据源N的信息,利用java技术中抽象数据源路由类AbstractRoutingDataSource,实现该类的方法determineCurrentLookupKey(),指定参数,通过线程N切换到切换点N对应的数据源N。
通过在方法A、方法B…方法N中加入切换点A、切换点B…切换点N,切换点A、切换点B…切换点N对应数据源A、数据源B…数据源N,当应用程序调用不同方法时,通过不同的线程,连接到不同的数据源,实现动态切换应用程序数据源。
由于存在两个以上方法中的切换点对应一相同数据源情况,也可以在配置文件中配置需要切换数据源的类加以监听,以实现动态切换应用程序数据源。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1.一种动态切换应用程序数据源的方法,其特征在于,包括:
在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项;
为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;
在应用程序需要切换数据源的功能模块中加入切换点,其中采用java反射机制加入切换点,所述切换点对应一数据源以及java类名;
当应用程序调用所述功能模块时,根据所述切换点对应配置项中的数据源信息和java类名,向连接池请求数据源,切换连接到相应的数据源;
其中,为新增的一个数据源启动一个连接池的线程,以防止后续用户访问过多造成的连接争抢;
其中,当减少一数据数据源时,关掉相应线程。
2.如权利要求1所述的动态切换应用程序数据源的方法,其特征在于,
新增一个数据源时,添加相应配置数据源信息,为新增数据源启动一个连接池的线程。
3.如权利要求1所述的动态切换应用程序数据源的方法,其特征在于,
所述功能模块是需要切换数据源的java方法。
4.如权利要求1所述的动态切换应用程序数据源的方法,其特征在于,
所述功能模块是配置文件中配置需要切换数据源的java类。
5.一种动态切换应用程序数据源的系统,其特征在于,包括:
配置数据源模块,在应用程序中配置多个数据源信息,启动应用程序时,加载数据源配置项;
数据库连接模块,为每个数据源建立一个连接池的独立线程,单个线程操作单个数据源;
切换点设置模块,在应用程序需要切换数据源的功能模块中加入切换点,其中采用java反射机制加入切换点,所述切换点对应一数据源以及java类名;
当应用程序调用切换点设置模块中的所述功能模块时,根据功能模块的所述切换点对应配置数据源模块的数据源信息和java类名,向数据库连接模块的连接池请求数据源,切换连接到相应的数据源,其中针对新增的一个数据源启动一个连接池的线程,以防止后续用户访问过多造成的连接争抢;
其中,当减少一数据数据源时,相应线程被关掉。
6.如权利要求5所述的动态切换应用程序数据源的系统,其特征在于,还包括:
数据源添加删除模块,用于新增一个数据源时,添加相应配置数据源信息,为新增数据源启动一个连接池的线程;并在减少一数据数据源时,用于关掉所述相应线程。
7.如权利要求5所述的动态切换应用程序数据源的系统,其特征在于,
所述功能模块是需要切换数据源的java方法。
8.如权利要求5所述的动态切换应用程序数据源的系统,其特征在于,
所述功能模块是配置文件中配置需要切换数据源的java类。
CN201510469431.7A 2015-08-03 2015-08-03 一种动态切换应用程序数据源的方法及系统 Active CN104991824B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510469431.7A CN104991824B (zh) 2015-08-03 2015-08-03 一种动态切换应用程序数据源的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510469431.7A CN104991824B (zh) 2015-08-03 2015-08-03 一种动态切换应用程序数据源的方法及系统

Publications (2)

Publication Number Publication Date
CN104991824A CN104991824A (zh) 2015-10-21
CN104991824B true CN104991824B (zh) 2019-09-13

Family

ID=54303640

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510469431.7A Active CN104991824B (zh) 2015-08-03 2015-08-03 一种动态切换应用程序数据源的方法及系统

Country Status (1)

Country Link
CN (1) CN104991824B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105490850B (zh) * 2015-12-09 2018-10-19 北京京东尚科信息技术有限公司 配置数据源的方法及系统
CN107045509A (zh) * 2016-02-05 2017-08-15 北京京东尚科信息技术有限公司 一种用于切换数据库连接的系统、设备和方法
CN107463391B (zh) * 2016-06-03 2020-11-10 阿里巴巴集团控股有限公司 任务处理方法、装置及设备
CN106446182A (zh) * 2016-09-29 2017-02-22 贵州云众知乐教育科技有限公司 一种数据库引擎
CN108520004B (zh) * 2018-03-12 2021-11-19 舟谱数据技术南京有限公司 基于方法参数切面多租户数据源切换系统
CN109542871A (zh) * 2018-10-23 2019-03-29 高新兴科技集团股份有限公司 多源数据管理方法、系统和数据管理设备
CN110262854A (zh) * 2019-05-21 2019-09-20 深圳壹账通智能科技有限公司 多源数据处理方法及终端设备
CN111565228B (zh) * 2020-04-29 2023-05-23 杭州涂鸦信息技术有限公司 一种数据源切换方法、装置、设备、介质
CN113806813A (zh) * 2021-08-27 2021-12-17 上海得帆信息技术有限公司 一种多数据源的数据隔离切换方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101295304A (zh) * 2007-04-29 2008-10-29 阿里巴巴集团控股有限公司 自动切换数据源的方法、装置及一种数据源切换器
CN101694665A (zh) * 2009-10-27 2010-04-14 中兴通讯股份有限公司 一种异构数据源数据查询方法及装置
CN103530427A (zh) * 2013-11-04 2014-01-22 北京京东尚科信息技术有限公司 一种基于多数据库的动态切换方法和装置
CN104715076A (zh) * 2015-04-13 2015-06-17 东信和平科技股份有限公司 一种多线程数据处理方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6892199B2 (en) * 2001-06-29 2005-05-10 Trendium, Inc. Saving burst data by using semi-merge sorting module
CN102360310B (zh) * 2011-09-28 2014-03-26 中国电子科技集团公司第二十八研究所 一种分布式系统环境下的多任务进程监视方法
CN103631647A (zh) * 2013-12-06 2014-03-12 北京京东尚科信息技术有限公司 一种实现分布式事务的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101295304A (zh) * 2007-04-29 2008-10-29 阿里巴巴集团控股有限公司 自动切换数据源的方法、装置及一种数据源切换器
CN101694665A (zh) * 2009-10-27 2010-04-14 中兴通讯股份有限公司 一种异构数据源数据查询方法及装置
CN103530427A (zh) * 2013-11-04 2014-01-22 北京京东尚科信息技术有限公司 一种基于多数据库的动态切换方法和装置
CN104715076A (zh) * 2015-04-13 2015-06-17 东信和平科技股份有限公司 一种多线程数据处理方法及装置

Also Published As

Publication number Publication date
CN104991824A (zh) 2015-10-21

Similar Documents

Publication Publication Date Title
CN104991824B (zh) 一种动态切换应用程序数据源的方法及系统
US7996593B2 (en) Interrupt handling using simultaneous multi-threading
US8327169B2 (en) Power management to maximize reduced power state for virtual machine platforms
CN107707622B (zh) 一种访问桌面云虚拟机的方法、装置及桌面云控制器
WO2016039963A2 (en) Resource sharing between two resource allocation systems
CN102999377A (zh) 服务并发访问控制方法及装置
CN102916953A (zh) 基于tcp连接实现并发服务的方法及装置
CN104636957A (zh) 一种处理高并发数据请求的系统和方法
DE10393969T5 (de) Mechanismus zur Verteilung von Unterbrechungen niedrigster Priorität unter Berücksichtigung des Prozessorleistungszustands
CN102262564A (zh) 视频监控平台系统的线程池结构及实现方法
CN106406905B (zh) 一种用于服务器的bios的setup选项的配置方法及系统
CN107451147A (zh) 一种kafka集群动态切换的方法和装置
CN111858007A (zh) 一种基于消息中间件的任务调度方法方法和装置
CN108519918A (zh) 一种基于事务链的分布式事务处理方法
US20160147271A1 (en) Powering nodes
CN109857471A (zh) 一种bios和bmc下电策略实时同步的方法、装置、终端及存储介质
CN108737566B (zh) 一种分布式的实时消息过滤系统
CN112346834A (zh) 数据库的请求处理方法和装置、电子设备和介质
CN113986497B (zh) 基于多租户技术的队列调度方法、装置及系统
CN105868030A (zh) 日志数据的通讯处理装置、方法以及移动终端
US10523746B2 (en) Coexistence of a synchronous architecture and an asynchronous architecture in a server
WO2020108537A1 (zh) 一种基于软件定义的虚拟网络资源分配系统
CN112099930A (zh) 一种量子计算机集群分布式队列调度方法
CN111190731A (zh) 基于权重的集群任务调度系统
US20170269944A1 (en) Method for optimizing performance of computationally intensive applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20201118

Address after: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Hangzhou Jiji Intellectual Property Operation Co.,Ltd.

Address before: 201616 Shanghai city Songjiang District Sixian Road No. 3666

Patentee before: Phicomm (Shanghai) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201217

Address after: 8319 Yanshan Road, Bengbu City, Anhui Province

Patentee after: Bengbu Lichao Information Technology Co.,Ltd.

Address before: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee before: Hangzhou Jiji Intellectual Property Operation Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210310

Address after: 313000 room 1019, Xintiandi commercial office, Yishan street, Wuxing District, Huzhou, Zhejiang, China

Patentee after: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Address before: 8319 Yanshan Road, Bengbu City, Anhui Province

Patentee before: Bengbu Lichao Information Technology Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211025

Address after: 430000 No. 07, 12 / F, building A1, phase 4-1, software industry, No. 1, Guanshan Avenue, Wuhan East Lake New Technology Development Zone, Wuhan, Hubei (Wuhan area of free trade zone)

Patentee after: Wuhan happy bubble Information Technology Co.,Ltd.

Address before: 313000 room 1019, Xintiandi commercial office, Yishan street, Wuxing District, Huzhou, Zhejiang, China

Patentee before: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

TR01 Transfer of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: A method and system for dynamically switching application data sources

Effective date of registration: 20220715

Granted publication date: 20190913

Pledgee: Wuhan area branch of Hubei pilot free trade zone of Bank of China Ltd.

Pledgor: Wuhan happy bubble Information Technology Co.,Ltd.

Registration number: Y2022420000227

PE01 Entry into force of the registration of the contract for pledge of patent right