CN114490686A - 多个数据源的切换方法、装置、系统以及介质 - Google Patents
多个数据源的切换方法、装置、系统以及介质 Download PDFInfo
- Publication number
- CN114490686A CN114490686A CN202111648185.3A CN202111648185A CN114490686A CN 114490686 A CN114490686 A CN 114490686A CN 202111648185 A CN202111648185 A CN 202111648185A CN 114490686 A CN114490686 A CN 114490686A
- Authority
- CN
- China
- Prior art keywords
- data source
- switching
- annotation
- data
- database operation
- 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.)
- Pending
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/23—Updating
- G06F16/235—Update request formulation
-
- 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/21—Design, administration or maintenance of 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/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种多个数据源的切换方法、装置、系统以及介质。所述方法包括:初始化项目中使用的多个数据源;声明与所述数据源对应的数据源注解;使用SpringBoot提供的数据源路由方案,设置多个数据源中的项目支持的数据源;以及根据数据库操作以及声明的所述数据源注解,实现项目支持的数据源的切换。本发明的上述方法能够实现项目中多个数据源的自动切换。
Description
技术领域
本发明涉及一种多个数据源的切换方法、装置、系统以及介质。
背景技术
在使用SpringBoot实现的微服务场景下,数据源通常配置为一个,也可提供多数据源的配置。而在使用场景下,需要使用多个数据源,并且需要对多个数据源进行切换。
在一种现有的数据源配置情况中,由于微服务场景下一个项目只查询一个数据源的理念,SpringBoot默认的实现方案是项目中只包含一个数据源。
另外,在另一种现有的数据源配置情况中,SpringBoot框架封装了默认的数据源,通过在配置文件中添加数据源的配置方式即可使用该数据源。在该方案中,可以提供多个数据源的配置,然而没有多个数据源间切换的场景。
发明内容
针对以上问题,为满足多个数据源间查询的来回快速切换的使用场景,本发明提供一种多个数据源的切换方法、装置、系统以及介质,从而实现项目中多个数据源的自动切换。
根据本发明的一方面,提供一种多个数据源的切换方法,包括:
初始化项目中使用的多个数据源;
声明与所述数据源对应的数据源注解;
使用SpringBoot提供的数据源路由方案,设置所述多个数据源中的项目支持的数据源;以及
根据数据库操作以及声明的所述数据源注解,实现所述项目支持的数据源的切换。
优选地,根据数据库操作以及声明的所述数据源注解,通过切面实现所述项目支持的数据源的切换。
优选地,基于数据库操作、所述数据库操作的方法设置的所述数据源注解以及所述数据库操作的类设置的所述数据源注解,实现所述项目支持的数据源的切换。
优选地,当判定所述数据库操作是在事务中或是主库操作时,读取相应的主库数据源;
当判定所述数据库操作不在事务中且不是主库操作时,且所述数据库操作的方法设置有所述数据源注解的声明时,读取与该方法设置的数据源注解相应的数据源;
当判定所述数据库操作不在事务中且不是主库操作,所述数据库操作的方法设置没有数据源注解的声明,且所述数据库操作的类设置有数据源注解的声明时,读取与该类设置的数据源注解相应的数据源;
当没有所述事务和主库操作,并且也没有所述数据源注解的声明时,使用默认的从库数据源。
优选地,使用SpringBoot提供的配置文件方式和自动装配方式,初始化所述数据源。
优选地,在所述数据源路由方案中,通过与数据源对应的注解设置来改变项目的当前数据源。
优选地,所述主库操作包括数据的插入和/或修改。
根据本发明的另一方面,提供一种多个数据源的切换装置,包括:
初始化单元,初始化项目中使用的多个数据源;
注解声明单元,声明与所述数据源对应的数据源注解;
数据源设置单元,使用SpringBoot提供的数据源路由方案,设置所述多个数据源中的项目支持的数据源;以及
切换单元,根据数据库操作以及声明的所述数据源注解,实现所述项目支持的数据源的切换。
根据本发明的另一方面,提供一种多个数据源的切换系统,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如以上方面所述的多个数据源的切换方法。
根据本发明的另一方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现如以上方面所述的多个数据源的切换方法。
发明的有益效果
根据本发明的多个数据源的切换方法、装置、系统以及介质,实现了用注解的方式声明要使用的数据源,通过例如切面实现具体数据源的切换,并且具有开发量小、使用便捷的优势。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,但其说明仅用于解释本发明,并不构成对本发明的不当限定。
图1示出根据本发明的一优选的实施例的多个数据源的切换方法。
图2示出步骤S4中的具体操作的一优选实例。
图3是根据本发明一优选实施例的多个数据源的切换装置的主要单元示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件并没有详细叙述。
结合图1-2说明本发明的多个数据源的切换方法。图1示出根据本发明的一优选的实施例的多个数据源的切换方法。图2示出步骤S4中的具体操作的一优选实例。
本发明提供了一种多个数据源的切换方法。如图1所示,本发明的一实施例的多个数据源的切换方法包括步骤S1至步骤S4。
在步骤S1中,初始化项目中使用的多个数据源(例如,数据库A、B、C等)。具体地,例如,使用SpringBoot提供的配置文件方式和自动装配方式,初始化数据源。
在步骤S2中,声明与所述数据源对应的数据源注解。注解首字母例如可以大写。注解的作用是作为数据源路由切换的索引(key)。当具体数据库操作指定要使用的数据源时,通过使用对应的数据源注解,进行数据源的切换。
从JDK5开始,Java增加对元数据的支持,也即注解,注解与注释具有一定区别,可以将注解理解为代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
在步骤S3中,使用SpringBoot提供的数据源路由方案,设置初始化的多个数据源中的项目支持的数据源。具体地,使用SpringBoot提供的数据源路由方案,设置项目支持的所有数据源和默认数据源。该方案中可通过数据源对应的索引设置来改变项目的当前数据源,此处并未实现自动切换,需要调用设置。这里数据源对应的索引为上面声明的和数据源同名的注解。
在步骤S4中,根据数据库操作以及声明的所述数据源注解,实现对应的所述数据源的切换。例如,根据数据库操作以及声明的所述数据源注解,通过切面(例如,数据库操作开始所定义的关注点)实现对应的所述数据源的切换,其中,切点为对数据库的所有操作。
优选地,基于数据库操作、所述数据库操作的方法设置的所述数据源注解以及所述数据库操作的类设置的所述数据源注解,实现对应的所述数据源的切换。
这里的事务是指:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位;事务由事务开始与事务结束之间执行的全部数据库操作组成。
具体地,对一个数据库的操作,例如支持判断:1、事务或主库插入、修改等操作;2、方法设置数据源注解;3、类设置数据源注解;4、默认库从库。其目的分别是:1、事务或主库操作需要使用相应的主库数据源,优先级最高;2、数据库操作的某一个方法通过设置声明的数据源注解,来表明要使用的数据源,优先级次之;3、数据库操作的类设置声明的数据源注解,来表明要使用的数据源,优先级次之;4、无数据源特殊要求,无事务和主库操作,也无数据源注解声明,则使用项目设置的默认从数据源。
参考图2进一步描述关于步骤S4中的具体操作的一优选实例。
(1)判断数据库操作是否在事务中或者是主库操作(例如,事务或主库插入、修改等操作)。当数据库操作是在事务中或者是主库操作且数据源是从库数据源时,根据优先级读取相应的主库数据源。
(2)如果数据库操作不在事务中也不是主库操作,判断是否有方法注解。即,当判定数据库操作不在事务中或不是主库操作时,且数据库操作的方法设置有数据源注解的声明时,读取与该方法设置的数据源注解相应的数据源。
具体地,如果判定有方法注解,则判断方法注解是否是主库数据源。如果是主库数据源,则直接使用该主库数据源;如果不是主库数据源,则为从库数据源。接着判断该从库数据源是否有对应的主库数据源。如果有对应的主库数据源,则切换成相应的主库数据源,并进行数据库操作。如果没有对应的主库数据源,则使用注解声明的从库数据源进行数据库操作。
(3)当判定无方法注解时,则按优先级读取是否有类注解。即,当判定数据库操作不在事务中或不是主库操作,数据库操作的方法设置没有数据源注解的声明,且数据库操作的类设置有数据源注解的声明时,读取与该类设置的数据源注解相应的数据源。
具体地,如果判定有类注解,则判断类注解是否是主库数据源。如果是主库数据源,则直接使用该主库数据源;如果不是主库数据源,则为从库数据源。接着判断该从库数据源是否有对应的主库数据源,如果有相应的主库数据源,则切换成相应的主库数据源,进行数据库操作。如果没有相应的主库数据源,则使用注解声明的从库数据源进行数据库操作。
(4)当无方法注解,也无类注解,则使用声明的默认从库数据源。即,当没有事务和主库操作,并且也没有数据源注解的声明时,使用默认的数据源,例如,从库数据源。
通过本发明的多个数据源的切换方法,实现了数据源的自动切换。在数据库操作层,只需要设置对应数据源的注解即可。
以下说明根据本发明实施例的基于多个数据源的切换装置。
图3是根据本发明一优选实施例的基于多个数据源的切换装置的主要单元示意图。
如图3所示,基于多个数据源的切换装置100包括:初始化单元101、注解声明单元102、数据源设置单元103和切换单元104。
在初始化单元101中,初始化项目中使用的多个数据源(例如,数据库A、B、C等)。具体地,例如,使用SpringBoot提供的配置文件方式和自动装配方式,初始化数据源。
在注解声明单元102中,声明与所述数据源对应的数据源注解。注解首字母例如可以大写。注解的作用是作为数据源路由切换的索引(key);具体数据库操作指定要使用的数据源时,通过使用对应的数据源注解。
在数据源设置单元103中,使用SpringBoot提供的数据源路由方案,设置项目支持的数据源。具体地,使用SpringBoot提供的数据源路由方案,设置项目支持的所有数据源和默认数据源。该方案中可通过数据源对应的索引设置来改变项目的当前数据源,此处并未实现自动切换,需要调用设置。这里数据源对应的索引为上面声明的和数据源同名的注解。
在切换单元104中,根据数据库操作以及声明的所述数据源注解,实现对应的所述数据源的切换。例如,根据数据库操作以及声明的所述数据源注解,通过切面实现对应的所述数据源的切换,其中,切点为对数据库的所有操作。
优选地,基于数据库操作、所述数据库操作的方法设置的所述数据源注解以及所述数据库操作的类设置的所述数据源注解,实现所述项目支持的数据源的切换。
优选地,当判定所述数据库操作是在事务中或是主库操作时,读取相应的主库数据源;当判定所述数据库操作不在事务中且不是主库操作时,且所述数据库操作的方法设置有所述数据源注解的声明时,读取与该方法设置的数据源注解相应的数据源;当判定所述数据库操作不在事务中且不是主库操作,所述数据库操作的方法设置没有数据源注解的声明,且所述数据库操作的类设置有数据源注解的声明时,读取与该类设置的数据源注解相应的数据源;当没有所述事务和主库操作,并且也没有所述数据源注解的声明时,使用默认的从库数据源。
优选地,在所述数据源路由方案中,通过与数据源对应的注解设置来改变项目的当前数据源。
优选地,所述主库操作包括数据的插入和/或修改。
作为另一方面,本发明还提供了一种多个数据源的切换系统,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明的上述实施例中的多个数据源的切换方法。
作为又一方面,本发明还提供了一种计算机可读介质,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被处理器执行时,使得程序执行上述实施例中所描述的多个数据源的切换方法。
根据本发明的多个数据源的切换方法、装置、系统以及介质,实现了用注解的方式声明要使用的数据源,通过切面实现具体数据源的切换,并且具有开发量小、使用便捷的优势。
本领域的技术人员容易理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。以上示例性实施例仅仅是用于阐明本发明的原理,而并非用于限定本发明的保护范围。本领域技术人员在不背离本发明所揭示的精神和原理的范围内,可以对本发明做出各种改进,而不会超出由权利要求书限定的范围。
Claims (10)
1.一种多个数据源的切换方法,包括:
初始化项目中使用的多个数据源;
声明与所述数据源对应的数据源注解;
使用SpringBoot提供的数据源路由方案,设置所述多个数据源中的项目支持的数据源;以及
根据数据库操作以及声明的所述数据源注解,实现所述项目支持的数据源的切换。
2.根据权利要求1所述的多个数据源的切换方法,其中,
根据数据库操作以及声明的所述数据源注解,通过切面实现所述项目支持的数据源的切换。
3.根据权利要求1或2所述的多个数据源的切换方法,其中,
根据数据库操作、所述数据库操作的方法设置的所述数据源注解以及所述数据库操作的类设置的所述数据源注解,实现所述项目支持的数据源的切换。
4.根据权利要求3所述的多个数据源的切换方法,其中,
当判定所述数据库操作是在事务中或是主库操作时,读取相应的主库数据源;
当判定所述数据库操作不在事务中且不是主库操作,且所述数据库操作的方法设置有所述数据源注解的声明时,读取与该方法设置的所述数据源注解相应的数据源;
当判定所述数据库操作不在事务中且不是主库操作,所述数据库操作的方法设置没有所述数据源注解的声明,且所述数据库操作的类设置有所述数据源注解的声明时,读取与该类设置的所述数据源注解相应的数据源;
当没有所述事务和主库操作,并且也没有所述数据源注解的声明时,使用默认的数据源。
5.根据权利要求1-4的任一项所述的多个数据源的切换方法,其中,
使用SpringBoot提供的配置文件方式和自动装配方式,初始化所述数据源。
6.根据权利要求1-5的任一项所述的多个数据源的切换方法,其中,
在所述数据源路由方案中,通过与数据源对应的注解设置来改变项目的当前数据源。
7.根据权利要求1-6的任一项所述的多个数据源的切换方法,其中,
所述主库操作包括数据的插入和/或修改。
8.一种多个数据源的切换装置,包括:
初始化单元,初始化项目中使用的多个数据源;
注解声明单元,声明与所述数据源对应的数据源注解;
数据源设置单元,使用SpringBoot提供的数据源路由方案,设置所述多个数据源中的项目支持的数据源;以及
切换单元,根据数据库操作以及声明的所述数据源注解,实现所述项目支持的数据源的切换。
9.一种多个数据源的切换系统,包括:
一个或多个处理器;和
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的多个数据源的切换方法。
10.一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现如权利要求1-7中任一项所述的多个数据源的切换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111648185.3A CN114490686A (zh) | 2021-12-30 | 2021-12-30 | 多个数据源的切换方法、装置、系统以及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111648185.3A CN114490686A (zh) | 2021-12-30 | 2021-12-30 | 多个数据源的切换方法、装置、系统以及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114490686A true CN114490686A (zh) | 2022-05-13 |
Family
ID=81508616
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111648185.3A Pending CN114490686A (zh) | 2021-12-30 | 2021-12-30 | 多个数据源的切换方法、装置、系统以及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114490686A (zh) |
-
2021
- 2021-12-30 CN CN202111648185.3A patent/CN114490686A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6993754B2 (en) | Annotations to executable images for improved dynamic optimization functions | |
US9710396B2 (en) | Sharing virtual memory-based multi-version data between the heterogeneous processors of a computer platform | |
KR100518584B1 (ko) | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 | |
US7856627B2 (en) | Method of SIMD-ization through data reshaping, padding, and alignment | |
US6976221B2 (en) | System and method for flexible software linking | |
CN101681294B (zh) | 用于存储器事务分组的方法和系统 | |
US8458681B1 (en) | Method and system for optimizing the object code of a program | |
US7299462B2 (en) | Relocation format for linking | |
EP2049992B1 (en) | Software transactional protection of managed pointers | |
US9971703B2 (en) | Technologies for position-independent persistent memory pointers | |
US9213531B2 (en) | Methods to eliminate extra memory loads while accessing global variables in position independent code | |
US20140208301A1 (en) | Function calling computer programs | |
US5625822A (en) | Using sorting to do matchup in smart recompilation | |
WO2017167289A1 (zh) | 代码控制方法和装置 | |
US10747514B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
US7269828B2 (en) | Method for safely instrumenting large binary code | |
CN112000367B (zh) | 一种二进制库文件版本兼容性识别方法和装置 | |
US8689200B1 (en) | Method and system for optimizing an executable program by generating special operations for identical program entities | |
CN114490686A (zh) | 多个数据源的切换方法、装置、系统以及介质 | |
US8091079B2 (en) | Implementing shadow versioning to improve data dependence analysis for instruction scheduling | |
US10671397B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
US8683455B1 (en) | Method and system for optimizing an executable program by selectively merging identical program entities | |
US6941549B1 (en) | Communicating between programs having different machine context organizations | |
CN115794260B (zh) | 一种简单的dsp软件库动态加载方法 | |
US10671363B2 (en) | Generating code for function calls that use multiple addressing modes |
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 |