CN103530427A - 一种基于多数据库的动态切换方法和装置 - Google Patents
一种基于多数据库的动态切换方法和装置 Download PDFInfo
- Publication number
- CN103530427A CN103530427A CN201310537530.5A CN201310537530A CN103530427A CN 103530427 A CN103530427 A CN 103530427A CN 201310537530 A CN201310537530 A CN 201310537530A CN 103530427 A CN103530427 A CN 103530427A
- Authority
- CN
- China
- Prior art keywords
- database
- database identification
- configuration file
- thread pool
- application system
- 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.)
- Granted
Links
Images
Classifications
-
- 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
Abstract
本发明提出一种基于多数据库的动态切换方法和装置,其中方法包括:在计算机应用系统启动时,读取相关的配置文件;所述配置文件包括一个以上键值对,其中,键为数据库标识,值为访问所述数据库的方法名;将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;利用获取的数据库标识执行该方法。本发明能够实现基于配置的读写分离,并且达到方法级别的数据库切换。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种基于多数据库的动态切换方法和装置。
背景技术
当数据库包括主数据库和一个以上从数据库时,从数据库按照固定的周期同步主数据库中保存的数据。计算机应用系统可以向主数据库进行写操作(包括增加、插入、删除等改变数据内容的操作),并从从数据库进行读操作。计算机应用系统针对主数据库或从数据库做的一个读操作或写操作称为一个方法;多个方法组成一个类,在一类方法中,所有的方法都针对同一个数据库做相同的操作(即读操作或写操作)。
在现有技术中,为每个读数据库的类或写数据库的类添加配上对应的数据库标识(即:数据源)。计算机应用系统启动后已经初始化好所有需要读写操作数据库的类,无法通过计算机应用系统运行时改变他们操作的数据库。如图1所示,在计算机应用系统启动后,负责写数据操作的一类方法针对对应的主数据库进行操作,而负责读数据操作的一类方法针对对应的从数据库进行操作。
为了实现计算机应用系统在多个数据库之间的切换,需要将读操作的方法与写操作的方法完全分离到不同程序代码中,这样不仅破坏了计算机应用系统的结构,也给计算机应用系统的开发增加成本;并且,现有技术只能实现对象级别(即针对类)的数据库切换,无法实现方法级别的数据库切换;同时,由于预先为每一类方法设置对应的数据库标识,计算机应用系统启动后已经初始化好所有需要读写操作数据库的类,因此无法在计算机应用系统运行时实现数据库的动态切换。
发明内容
本发明提供了一种基于多数据库的动态切换方法,能够实现基于配置的读写分离,并且达到方法级别的数据库切换。
本发明还提供了一种基于多数据库的动态切换装置,能够实现基于配置的读写分离,并且达到方法级别的数据库切换。
本发明的技术方案是这样实现的:
一种基于多数据库的动态切换方法,包括:
在计算机应用系统启动时,读取相关的配置文件;所述配置文件包括一个以上键值对,其中,键为数据库标识,值为访问所述数据库的方法名;将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;
当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
利用获取的数据库标识执行该方法。
上述方法中,所述的配置文件在计算机应用系统的运行过程中随着方法的变化而动态变化;
从线程池中获取该方法所对应的数据库标识的方式可以为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,从线程池中获取所述数据库标识。
拦截方法的方式可以为:采用面向切面编程(AOP)技术拦截该方法。
一种基于多数据库的动态切换装置,包括:
初始化模块,用于在计算机应用系统启动时,读取相关的配置文件,并将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;其中,所述配置文件包括一个以上键值对,键为数据库标识,值为访问所述数据库的方法名;
方法拦截模块,用于当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
方法执行模块,用于利用所述方法拦截模块获取的数据库标识执行该方法。
上述装置中,配置文件在计算机应用系统的运行过程中随着方法的变化而动态变化;
方法拦截模块从线程池中获取该方法所对应的数据库标识的方式可以为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则通知所述初始化模块重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,并在所述初始化模块设置完毕之后从线程池中获取所述数据库标识。
方法拦截模块拦截方法的方式可以为:AOP技术拦截该方法。
可见,本发明提出的基于多数据库的动态切换方法及装置,通过将配置文件中的数据库标识设置在计算机应用系统的线程池中,实现了基于配置的读写分离;并且,由于配置文件中的键值对是数据库标识与方法名的对应关系,因此能够达到方法级别的数据库切换。
附图说明
图1为现有技术中计算机应用系统启动后调用方法的方式示意图;
图2为本发明提出的基于多数据库的动态切换方法实现流程图;
图3为本发明实施例一的实现流程图;
图4为本发明提出的基于多数据库的动态切换装置结构示意图。
具体实施方式
本发明提出一种基于多数据库的动态切换方法,如图2为该方法的实现流程图,包括:
步骤201:在计算机应用系统启动时,读取相关的配置文件;所述配置文件包括一个以上键值对,其中,键为数据库标识,值为访问所述数据库的方法名;将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;
步骤202:当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
步骤203:利用获取的数据库标识执行该方法。
上述方法中,当计算机应用系统启动之后,如果出现新的方法,则配置文件可以在计算机应用系统的运行过程中随着方法的变化而动态变化;
上述步骤202中,从线程池中获取该方法所对应的数据库标识的方式可以为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,从线程池中获取所述数据库标识。
拦截该方法的方式可以为:采用面向切面编程(AOP,Aspect OrientedProgramming)技术拦截该方法。
以下举具体的实施例详细介绍。
实施例一:
在本实施例中,预先在计算机应用系统中设置基于多数据库的动态切换装置。如图3为本发明实施例一的实现流程图,包括:
步骤301:在计算机应用系统启动时,基于多数据库的动态切换装置读取相关的配置文件,配置文件以键值对的形式出现,其中,键配置成数据库的标识,值配置成需要访问成这个数据库的方法名。
配置文件存放在计算机应用系统中,是现有技术中已有的文件,配置文件就是在用户登录电脑或使用软件时,软件系统为用户所要加载所需环境的设置和文件的集合。它包括所有用户专用的配置设置。
步骤302:当计算机应用系统的方法通过接口或服务被调用时,基于多数据库的动态切换装置采用AOP技术对该方法进行拦截,并从计算机应用系统的本地线程池中查找该方法对应的数据库标识。
其中,线程池中存放了计算机应用系统被调用的方法所对应的数据库标识;当方法被执行时,就从这个线程池中获取该方法对应的数据库标识。这样做是为了能够实现动态切换数据库。
步骤303:判断线程池中是否存在该数据库标识;如果存在,则执行步骤304;如果不存在,则执行步骤305;
步骤304:获取该方法对应的数据库标识;返回该方法,利用该方法对应的数据库标识执行该方法。结束当前流程。
步骤305:基于多数据库的动态切换装置重新读取配置文件,根据配置文件的内容进行初始化,将该方法对应的数据库标识设置到本地线程池中,获取该方法对应的数据库标识;返回该方法,利用该方法对应的数据库标识执行该方法。
本发明还提出一种基于多数据库的动态切换装置,如图4为该装置结构示意图,包括:
初始化模块401,用于在计算机应用系统启动时,读取相关的配置文件,并将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;其中,所述配置文件包括一个以上键值对,键为数据库标识,值为访问所述数据库的方法名;
方法拦截模块402,用于当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
方法执行模块403,用于利用所述方法拦截模块402获取的数据库标识执行该方法。
上述装置中,配置文件在计算机应用系统的运行过程中随着方法的变化而动态变化;
方法拦截模块402从线程池中获取该方法所对应的数据库标识的方式可以为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则通知所述初始化模块401重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,并在所述初始化模块401设置完毕之后从线程池中获取所述数据库标识。
上述装置中,方法拦截模块402拦截该方法的方式可以为:采用AOP技术拦截该方法。
综上可见,本发明提出的基于多数据库的动态切换方法及装置,通过将配置文件中的数据库标识设置在计算机应用系统的线程池中,实现了基于配置的读写分离;并且,由于配置文件中的键值对是数据库标识与方法名的对应关系,因此能够达到方法级别的数据库切换。当计算机应用系统运行过程中出现新的方法时,不需要进行代码修改,只需要采用配置文件进行配置,这种方式可以支持到方法级别上的数据源切换,对于同一个数据操作层无需进行类中的方法分离。对于线上已经上线的应用,方便进行多数据源切换。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (6)
1.一种基于多数据库的动态切换方法,其特征在于,所述方法包括:
在计算机应用系统启动时,读取相关的配置文件;所述配置文件包括一个以上键值对,其中,键为数据库标识,值为访问所述数据库的方法名;将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;
当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
利用获取的数据库标识执行该方法。
2.根据权利要求1所述的方法,其特征在于,所述配置文件在计算机应用系统的运行过程中随着方法的变化而动态变化;
所述从线程池中获取该方法所对应的数据库标识的方式为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,从线程池中获取所述数据库标识。
3.根据权利要求1所述的方法,其特征在于,所述拦截该方法的方式为:采用面向切面编程AOP技术拦截该方法。
4.一种基于多数据库的动态切换装置,其特征在于,所述装置包括:
初始化模块,用于在计算机应用系统启动时,读取相关的配置文件,并将所述配置文件中的数据库标识设置在计算机应用系统的线程池中;其中,所述配置文件包括一个以上键值对,键为数据库标识,值为访问所述数据库的方法名;
方法拦截模块,用于当计算机应用系统的方法被调用时,拦截该方法,从所述线程池中获取该方法所对应的数据库标识,返回所述被拦截的方法;
方法执行模块,用于利用所述方法拦截模块获取的数据库标识执行该方法。
5.根据权利要求4所述的装置,其特征在于,所述配置文件在计算机应用系统的运行过程中随着方法的变化而动态变化;
所述方法拦截模块从线程池中获取该方法所对应的数据库标识的方式为:查找线程池中是否存在该方法所对应的数据库标识,如果存在,则获取所述数据库标识;如果不存在,则通知所述初始化模块重新读取配置文件,将配置文件中该方法对应的数据库标识设置在线程池中,并在所述初始化模块设置完毕之后从线程池中获取所述数据库标识。
6.根据权利要求4所述的装置,其特征在于,所述方法拦截模块拦截该方法的方式为:采用面向切面编程AOP技术拦截该方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310537530.5A CN103530427B (zh) | 2013-11-04 | 2013-11-04 | 一种基于多数据库的动态切换方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310537530.5A CN103530427B (zh) | 2013-11-04 | 2013-11-04 | 一种基于多数据库的动态切换方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103530427A true CN103530427A (zh) | 2014-01-22 |
CN103530427B CN103530427B (zh) | 2018-10-19 |
Family
ID=49932436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310537530.5A Active CN103530427B (zh) | 2013-11-04 | 2013-11-04 | 一种基于多数据库的动态切换方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103530427B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462200A (zh) * | 2014-10-31 | 2015-03-25 | 北京思特奇信息技术股份有限公司 | 一种通过第三方数据库控制系统切换的方法及系统 |
CN104991824A (zh) * | 2015-08-03 | 2015-10-21 | 上海斐讯数据通信技术有限公司 | 一种动态切换应用程序数据源的方法及系统 |
CN106095878A (zh) * | 2016-06-07 | 2016-11-09 | 中国建设银行股份有限公司 | 基于分库分表的数据库操作装置及方法 |
CN106845237A (zh) * | 2017-01-23 | 2017-06-13 | 北京安华金和科技有限公司 | 一种基于sql语句的sql注入风险评估方法 |
CN106909674A (zh) * | 2017-03-01 | 2017-06-30 | 郑州云海信息技术有限公司 | 一种数据库统计信息更新的方法及装置 |
CN107301179A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 数据库读写分离的方法和装置 |
CN110096552A (zh) * | 2019-05-07 | 2019-08-06 | 广州虎牙信息科技有限公司 | 一种业务数据的读、写方法、装置、设备和存储介质 |
CN110321337A (zh) * | 2019-06-24 | 2019-10-11 | 南威互联网科技集团有限公司 | 一种实现数据库动态切换的方法及计算机可读存储介质 |
CN110765187A (zh) * | 2018-07-09 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种数据源路由管理方法和装置 |
CN111562993A (zh) * | 2020-04-24 | 2020-08-21 | 深圳市优必选科技股份有限公司 | 一种动态切换数据源的Web应用系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060143156A1 (en) * | 2004-12-29 | 2006-06-29 | International Business Machines Corporation | Framework to allow one CMP EJB to connect to multiple data sources |
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101408899A (zh) * | 2008-11-21 | 2009-04-15 | 北京中企开源信息技术有限公司 | 一种网站多数据源切换方法和装置 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
-
2013
- 2013-11-04 CN CN201310537530.5A patent/CN103530427B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060143156A1 (en) * | 2004-12-29 | 2006-06-29 | International Business Machines Corporation | Framework to allow one CMP EJB to connect to multiple data sources |
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101408899A (zh) * | 2008-11-21 | 2009-04-15 | 北京中企开源信息技术有限公司 | 一种网站多数据源切换方法和装置 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462200A (zh) * | 2014-10-31 | 2015-03-25 | 北京思特奇信息技术股份有限公司 | 一种通过第三方数据库控制系统切换的方法及系统 |
CN104991824B (zh) * | 2015-08-03 | 2019-09-13 | 上海斐讯数据通信技术有限公司 | 一种动态切换应用程序数据源的方法及系统 |
CN104991824A (zh) * | 2015-08-03 | 2015-10-21 | 上海斐讯数据通信技术有限公司 | 一种动态切换应用程序数据源的方法及系统 |
CN107301179A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 数据库读写分离的方法和装置 |
CN106095878A (zh) * | 2016-06-07 | 2016-11-09 | 中国建设银行股份有限公司 | 基于分库分表的数据库操作装置及方法 |
CN106095878B (zh) * | 2016-06-07 | 2019-11-19 | 中国建设银行股份有限公司 | 基于分库分表的数据库操作装置及方法 |
CN106845237A (zh) * | 2017-01-23 | 2017-06-13 | 北京安华金和科技有限公司 | 一种基于sql语句的sql注入风险评估方法 |
CN106909674A (zh) * | 2017-03-01 | 2017-06-30 | 郑州云海信息技术有限公司 | 一种数据库统计信息更新的方法及装置 |
CN110765187A (zh) * | 2018-07-09 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 一种数据源路由管理方法和装置 |
CN110096552A (zh) * | 2019-05-07 | 2019-08-06 | 广州虎牙信息科技有限公司 | 一种业务数据的读、写方法、装置、设备和存储介质 |
CN110321337A (zh) * | 2019-06-24 | 2019-10-11 | 南威互联网科技集团有限公司 | 一种实现数据库动态切换的方法及计算机可读存储介质 |
CN111562993A (zh) * | 2020-04-24 | 2020-08-21 | 深圳市优必选科技股份有限公司 | 一种动态切换数据源的Web应用系统 |
CN111562993B (zh) * | 2020-04-24 | 2023-10-10 | 深圳市优必选科技股份有限公司 | 一种动态切换数据源的Web应用系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103530427B (zh) | 2018-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103530427A (zh) | 一种基于多数据库的动态切换方法和装置 | |
CN106469103B (zh) | 硬盘的维护方法和装置 | |
CN103617176A (zh) | 一种实现多源异构数据资源自动同步的方法 | |
CN103678494A (zh) | 客户端同步服务端数据的方法及装置 | |
CN102999362A (zh) | 一种修改bios启动项顺序的方法 | |
CN103744906A (zh) | 一种数据同步系统、方法及装置 | |
CN101650660A (zh) | 从中央存储装置引导计算机系统 | |
CN105183352A (zh) | 一种在终端黑屏状态下实现更多手势识别的方法及装置 | |
CN103631623A (zh) | 一种集群系统中部署应用软件的方法及装置 | |
CN102903029A (zh) | 云计算资源分域授权方法 | |
CN102542054A (zh) | 一种利用缓存表来提高数据库数据插入性能的方法 | |
KR20190050993A (ko) | 이관 시스템 및 방법 업데이트 | |
CN103902562A (zh) | 一种终端数据库升级方法及相关装置 | |
CN103744708A (zh) | 一种实现linux操作系统下固定磁盘设备名的方法 | |
CN103136200A (zh) | 数据更新信息获取方法、装置及数据同步方法、装置 | |
CN108491326A (zh) | 测试行为重组方法、装置及存储介质 | |
CN104850027A (zh) | 一种can数据接口建模自动生成方法及系统 | |
CN102968373A (zh) | 一种测试系统的维护方法及装置 | |
CN105591778A (zh) | 一种分布式系统更新配置文件的方法及系统 | |
CN101075210B (zh) | 无需再引导对硬盘进行分区的设备和方法 | |
CN103870762A (zh) | 分区访问方法和电子设备 | |
CN105573757A (zh) | Android系统的语言更新方法及装置 | |
CN102768672B (zh) | 一种磁盘空间管理方法和装置 | |
CN103019833A (zh) | 终端设备以及使终端设备支持操作系统快速切换的方法 | |
CN102981824A (zh) | 一种获取安卓应用程序的入口及图标的方法 |
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 |