发明内容
基于上述技术问题,本发明提供了一种多数据源管理方法,在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数,并确定所述目标方法函数中的数据源提取对象,根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源。
本发明第一方面提供了一种多数据源管理方法,应用于微服务应用系统,所述方法包括:
在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
确定所述目标方法函数中的数据源提取对象;
根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理;
在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行所述拦截所述目标应用程序的目标方法函数的步骤。
在本发明的一些实施例中,所述确定所述目标方法函数中的数据源提取对象,包括:
从所述目标方法函数中获取所述目标方法函数对应的连接点信息;
对所述连接点信息进行解析并确定数据源提取对象。
在本发明的一些实施例中,所述根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,包括:
建立预设名称的注解,并将所述预设名称的注解与所述目标方法函数关联;
将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强;
根据所述数据源提取对象,并结合所述预设名称的注解查询出目标数据源。
在本发明的一些实施例中,所述将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强,包括:
通过Spring容器的面向切面编程的附加配置文件存储所述预设名称的注解;
在所述预设名称的注解中存放键值对,其中,所述键值对表征所述数据源提取对象与所述目标数据源的映射关系及所述目标数据源的链接路径。
在本发明的一些实施例中,所述根据所述数据源提取对象,并结合所述预设名称的注解查询出目标数据源,包括:
根据所述数据源提取对象与所述目标数据源的映射关系查找与所述数据源提取对象对应的数据源ID;
根据所述目标数据源的链接路径、所述数据源ID和线程信息查询出所述数据源提取对象对应的数据源。
在本发明的一些实施例中,所述将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强之前,还包括织入前置通知以获取Spring容器的连接资源;所述将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强之后,还包括织入后置通知以释放Spring容器的连接资源。
在本发明的一些实施例中,所述查询出目标数据源之后还包括采用数据源链接模板的方式连接所述目标数据源,所述采用数据源链接模板的方式连接所述目标数据源包括:
定义预设数据源链接模板;
根据所述预设数据源链接模板建立与数据源的连接信息,所述连接信息中至少包括数据源ID、数据源名称、数据源账号密码和数据源所在路径;
根据所述数据源的连接信息获得欲连接数据源中的数据源提取对象。
本发明第二方面提供了一种多数据源管理装置,所述装置包括:
方法确定模块,被配置为在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
对象确定模块,被配置为确定所述目标方法函数中的数据源提取对象;
处理模块,被配置为根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求进行数据处理;
切换模块,被配置为在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行拦截所述目标应用程序的目标方法函数的步骤。
本发明第三方面提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行以下步骤:
在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
确定所述目标方法函数中的数据源提取对象;
根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理;
在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行所述拦截所述目标应用程序的目标方法函数的步骤。
本发明第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以下步骤:
在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
确定所述目标方法函数中的数据源提取对象;
根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理;
在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行所述拦截所述目标应用程序的目标方法函数的步骤。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本申请在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数,确定所述目标方法函数中的数据源提取对象,根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理,解决了现有技术中管理数据源的方法不够灵活高效且处理数据库切换问题较为繁琐的技术问题,使对数据源的管理灵活高效;本申请提出在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行确定并所述拦截所述目标应用程序的目标方法函数的步骤,能实现多数据源自如地动态切换,从而大大提升了多数据源的管理效率。不仅如此,现有技术中过于依赖采用不同目录链接不同的数据源的方式,而本申请所述方法能解除使用多数据源时对目录或者文件名称的限制,实现了更加简洁高效的多数据源管理。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
具体实施方式
以下,将参照附图来描述本申请的实施例。但是应该理解的是,这些描述只是示例性的,而并非要限制本申请的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本申请的概念。对于本领域技术人员来说显而易见的是,本申请可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本申请发生混淆,对于本领域公知的一些技术特征未进行描述。
应予以注意的是,这里所使用的术语仅是为了描述具体实施例,而非意图限制根据本申请的示例性实施例。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式。此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组合。
现在,将参照附图更详细地描述根据本申请的示例性实施例。然而,这些示例性实施例可以多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。附图并非是按比例绘制的,其中为了清楚表达的目的,可能放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状以及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
下面结合说明书附图1-附图5给出几个实施例来描述根据本申请的示例性实施方式。需要注意的是,下述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
数据是所有工程系统所必需的资源,外部请求访问工程系统的数据,工程系统将数据加工后返回给外部。从某种程度上而言工程系统就是数据加算法的结合体。数据会存于数据库中,一般来说工程系统只会使用一个数据库,但是针对比较大的系统,或者是比较复杂的系统,就会存在多类型或多个数据库的使用。比如较大型的工程系统,因为领域模型划分或者数据庞大,不得不将数据分散在多个数据库中。或者在比较复杂的工程系统,其内部可能链接到多个不同类型的数据库源,如Oracel类型的数据库,Mysql类型的数据库。这种复杂的大型的工程系统,在处理这种多类型的多个数据库时,会链接多个数据源,采用不同目录下链接(在不同目录中设置不同的数据源)不同数据源的方式。这种方式是原先工程系统支持的方式,不同的目录下面的sql.xml(数据库的数据执行方法)去链接不同的数据库,以目录作为标识,做到链接不同类型数据库和多个数据库。然而这样管理数据源的方法不够灵活,也不够高效,且处理数据库切换问题较为繁琐。
因此在本申请的一些实施例中,提供了一种多数据源管理方法,如图1所示,所述方法包括:
S1、在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
S2、确定所述目标方法函数中的数据源提取对象;
S3、根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理;
S4、在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行所述拦截所述目标应用程序的目标方法函数的步骤。
首先需要说明的是,微服务应用系统是部署有所述微服务应用的集群;所述集群,包括:N个节点,N为正整数;每个节点对应一台服务器或一台云主机。本质上属于一种微服务架构,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。
在一种具体的实现方式中,确定所述目标方法函数中的数据源提取对象时,先从所述目标方法函数中获取所述目标方法函数对应的连接点信息,再对所述连接点信息进行解析并确定数据源提取对象。这里的数据源提取对象可以是数据表,也可以是数据表中的不同字段,具体以从函数中提取到的结果为准。
在本申请的一些实施方式中,根据数据源提取对象结合目标方法函数所关联的预设注解查询出目标数据源,包括:建立预设名称的注解,并将所述预设名称的注解与所述目标方法函数关联;将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强;根据所述数据源提取对象,并结合所述预设名称的注解查询出目标数据源。
在一种优选的实现方式中,将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强时,先通过Spring容器的面向切面编程的附加配置文件存储所述预设名称的注解,在所述预设名称的注解中存放键值对,其中,所述键值对表征所述数据源提取对象与所述目标数据源的映射关系及所述目标数据源的链接路径。例如:微服务应用系统引用switchdata.jar,并在指定的附加流程方法上添加注解DynamicSwitchDataSource,这里的DynamicSwitchDataSource就是以Spring的AOP即面向切面编程作为底层技术来配置的,DynamicSwitchDataSource存储键值对,即关键字Key和其对应的Value值。
需要说明的是,Spring容器是Spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们,并由其通过IoC技术管理,串联他们的整个生命周期从创建到销毁。AOP(Aspect-Oriented Programming的简称),也就是面向切面编程的意思,它是一种编程思想,在Spring的官方文档中描述:面向切面编程(AOP)提供了另一种思考程序结构的方式来对面向对象编程(OOP)的进行补充和完善,面向对象编程(OOP)中关键的是对象,而面向切面编程(AOP)中关键的是切面。OOP针对的是业务处理过程中的实体的属性和行为,而不像AOP,其是面对业务处理过程中的某个步骤或阶段。AOP中切面可以实现关注点的模块化(即统一抽取,提高复用),例如跨越多种类型和对象的事务管理,这种关注点在AOP文献中通常被称为横切关注点。因此,上述将预设名称的注解通过Spring容器的面向切面编程实现目标应用中目标方法的切面增强,根本上是利用了AOP的动态代理功能,且以注解的方式让目标方法更有“特质”,以增强了其被执行性。
在本申请的一些实施例中,根据所述数据源提取对象,并结合所述预设名称的注解查询出目标数据源时,首先根据所述数据源提取对象与所述目标数据源的映射关系查找与所述数据源提取对象对应的数据源ID例如具体执行时,获取注解上的数据源的信息,可以通过“String dataSourceKey=annotationClass.dataSource()”的代码从远程config或redis中获取动态配置信息,获取真实的值。然后再根据所述目标数据源的链接路径、所述数据源ID和线程信息查询出所述数据源提取对象对应的数据源。例如,键值对中设置a.1=Master,b.2=Slave,c.3=Oracle,等等,数据源ID分别是1、2、3,目标数据对象分别是a、b、c。如图2所示,根据切面增强后的目标方法查找目标数据对象对应的不同的数据源,简单高效。上述的数据源指代数据库,如Oracle。
在本申请的一些实施例中,将预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强之前,还包括织入前置通知以获取Spring容器的连接资源;所述将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强之后,还包括织入后置通知以释放Spring容器的连接资源。具体而言,@Before:前置通知,在方法执行之前执行,是做好铺垫工作即连接资源,@After:后置通知,在方法执行之后执行,即释放资源。
在本申请其它的一些实施例中,在查询出目标数据源之后还包括采用数据源链接模板的方式连接所述目标数据源,采用数据源链接模板的方式连接所述目标数据源时,先定义预设数据源链接模板,然后根据所述预设数据源链接模板建立与数据源的连接信息,其中,连接信息中至少包括数据源ID、数据源名称、数据源账号密码和数据源所在路径,根据数据源的连接信息获得欲连接数据源中的数据源提取对象。这里所谓的定义预设数据源链接模板,例如可采用代码:class.forName(“com.mysql.jdbc.Driver”),而建立与数据源的连接可采用代码conn DriverManger.getConnection建立,其参数包含数据源ID、数据源名称、数据源账号密码和数据源所在路径,即可以获取到运行时数据源JDBC URL地址。如图3所示,利用Spring容器的Aop(切面编程),针对要修改的方法(目标方法)进行切面增强,应用启动生成一个动态代理类,主要负责监控方法的数据源,从远程config或者redis配置中获取真实数据源信息,将数据源传递给spring的jdbc(数据库链接模板)去处理,以帮助spring去处理数据库相关的操作,当jdbc拿到切面编程获取的数据源信息然后再去链接该数据源,当发生数据库操作时就会去访问该数据源,从而达到动态切换数据源,优化多数据源使用方式的技术效果。
在具体实施时,基于业务需求对所述目标数据源中的数据进行目标处理,所述目标处理可以是增加新数据记录、删除已有的数据记录或修改数据的操作,具体地,根据实际的业务需求而定。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
在本申请示例性实施例中,还提供了一种多数据源管理装置,其执行各实施例中的所述多数据源管理方法,如图4所示,所述装置包括:
方法确定模块401,被配置为在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;
对象确定模块402,被配置为确定所述目标方法函数中的数据源提取对象;
处理模块403,被配置为根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求进行数据处理;
切换模块404,被配置为在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行拦截所述目标应用程序的目标方法函数的步骤。
在本申请的一些实施方式中,处理模块403在实现根据数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求进行数据处理的功能时,具体执行以下步骤:建立预设名称的注解,并将所述预设名称的注解与所述目标方法函数关联;将所述预设名称的注解通过Spring容器的面向切面编程实现所述目标方法函数的切面增强;根据所述数据源提取对象,并结合所述预设名称的注解查询出目标数据源。
还需要强调的是,本申请实施例中提供的系统可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
下面请参考图5,其示出了本申请的一些实施方式所提供的一种计算机设备的示意图。如图5所示,所述计算机设备2包括:处理器200,存储器201,总线202和通信接口203,所述处理器200、通信接口203和存储器201通过总线202连接;所述存储器201中存储有可在所述处理器200上运行的计算机程序,所述处理器200运行所述计算机程序时执行本申请前述任一实施方式所提供的多数据源管理方法。
其中,存储器201可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口203(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线202可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器201用于存储程序,所述处理器200在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的所述多数据源管理方法可以应用于处理器200中,或者由处理器200实现。
处理器200可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器200中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器200可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器201,处理器200读取存储器201中的信息,结合其硬件完成上述方法的步骤。
本申请实施方式还提供一种与前述实施方式所提供的多数据源管理方法对应的计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的多数据源管理方法。
另外,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
本申请实施方式还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前述任意实施方式所提供的多数据源管理方法的步骤,包括:在接收到针对目标应用程序的执行指令时,拦截所述目标应用程序的目标方法函数;确定所述目标方法函数中的数据源提取对象;根据所述数据源提取对象结合所述目标方法函数所关联的预设注解查询出目标数据源,并基于业务需求对所述目标数据源中的数据进行目标处理;在接收到针对目标应用程序的切换指令时,根据所述切换指令继续执行所述拦截所述目标应用程序的目标方法函数的步骤。
需要说明的是:在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备有固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序。实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。