一种基于SpringBoot在不同环境的数据源接入方法和装置与流程

文档序号:16782152发布日期:2019-02-01 19:13阅读:355来源:国知局
一种基于Spring Boot在不同环境的数据源接入方法和装置与流程

本申请涉及数据库访问领域,尤其涉及一种基于springboot在不同环境的数据源接入方法和装置。



背景技术:

数据库是按照数据结构来组织、存储和管理数据的仓库。数据库有多种类型,例如,简单存储有各种数据表格的数据库或存储海量数据的大型数据库系统。面向对象时,由于数据库在不同的环境下(如开发环境或测试环境),需要不同的数据源对其进行访问,因此,工作人员在切换数据库的环境时,需要对数据源进行切换。

目前,现有技术多采用orm(object/relationmapping,对象-关系映射)或jdbc(javadatabaseconnectivity,java数据库连接)来访问数据库,但是,无论orm还是jdbc均只配置一个数据源。工作人员要实现在不同环境下的数据库访问,就需通过硬编码的方式配置不同的数据源,从而导致工作人员配置的信息非常多,不仅增加开发量,还需花费很多时间和精力,并且实现不灵活。



技术实现要素:

本申请提供了一种基于springboot在不同环境的数据源接入方法及装置,以解决现有的orm和jdbc均只配置一个数据源,工作人员要实现在不同环境下的数据库访问,就需通过硬编码的方式配置不同的数据源,从而导致工作人员配置的信息非常多,不仅增加开发量,还需花费很多时间和精力,并且实现不灵活。

第一方面,本申请提供一种基于springboot在不同环境的数据源接入方法,所述方法包括:

加载配置文件,所述配置文件包括所述配置文件的类型、所述配置文件的环境变量和预设启动条件;

根据所述配置文件的类型和所述配置文件的环境变量,加载与所述配置文件对应的数据访问对象配置组件;

利用所述数据访问对象配置组件中的mapper包的至少一个预设包路径,加载每个所述包路径指定的mapper对象,每个所述mapper对象绑定至少一个第一预设数据源;

根据所述预设启动条件,启动所述配置文件对应的数据访问对象配置组件;

在service层的基类中注入父接口,所述父接口关联至少一个第二预设数据源;

在所述service层的实现类继承所述基类的父接口,并获取所有第二预设数据源;

根据所述service层的实现类和mapper对象,获取与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源;

根据与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源,访问所述与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源连接的数据库。

第二方面,本申请提供一种基于springboot在不同环境的数据源接入装置,所述装置包括:

加载配置文件模块,用于加载配置文件,所述配置文件包括所述配置文件的类型、所述配置文件的环境变量和预设启动条件;

加载数据访问对象配置组件模块,用于根据所述配置文件的类型和所述配置文件的环境变量,加载与所述配置文件对应的数据访问对象配置组件;

加载mapper对象和数据源模块,利用所述数据访问对象配置组件中的mapper包的至少一个预设包路径,加载每个所述包路径指定的mapper对象,每个所述mapper对象绑定至少一个第一预设数据源;

启动模块,用于根据所述预设启动条件,启动所述配置文件对应的数据访问对象配置组件;

基类注入模块,用于在service层的基类中注入父接口,所述父接口关联至少一个第二预设数据源;

实现类继承模块,用于在所述service层的实现类继承所述基类,以获取所述父接口及父接口关联的数据源;

获取模块,用于根据所述service层的实现类和mapper对象,获取与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源;

访问模块,用于根据与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源,访问所述与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源连接的数据库。

由以上技术方案可知,本申请提供了一种基于springboot在不同环境的数据源接入方法及装置,根据配置文件的类型和环境变量,加载并启动与其相对应的数据访问对象配置组件,然后利用service层的基类和实现类,获取所需的数据源,进而可以访问该数据源连接的数据库。因此,工作人员只需修改配置文件的类型和环境变量,以及预先存储好数据访问对象配置组件,无需工作人员通过硬编码的方式重新配置新的数据源,大大降低工作人员的工作量,提高工作效率,并且提高数据源接入的灵活性。

附图说明

为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请提供的一种基于springboot在不同环境的数据源接入方法的流程图;

图2为图1中步骤14的流程图;

图3为图1中步骤18之后的流程图;

图4为图1中步骤17的流程图;

图5为本申请提供的一种基于springboot在不同环境的数据源接入装置一实施例的结构示意图;

图6为启动模块的结构示意图;

图7为本申请提供的一种基于springboot在不同环境的数据源接入装置另一实施例的结构示意图;

图8为获取模块的结构示意图。

具体实施方式

由于本申请的发明内容涉及框架程序执行,因此,首先介绍实施例中的springboot。springboot是由pivota团队提供的全新框架,该框架使用特定的方式(即starter,约定优先于配置)来进行配置,从而使开发人员不再需要定义样板化的配置。springboot简化了spring项目配置,使得jar依赖管理以及应用编译和部署更为简单。springboot提供自动化配置,工作人员只需编写必要的代码和配置必须的属性即可。

参见图1,本申请一实施例提供了一种基于springboot在不同环境的数据源接入方法,包括如下步骤:

步骤11:加载配置文件,所述配置文件包括所述配置文件的类型、所述配置文件的环境变量和预设启动条件。

配置文件为springboot的配置文件,即application配置文件,该配置文件中包括配置文件的类型、配置文件的环境变量和预设启动条件。其中,配置文件的类型是该配置文件所在的模块类型,例如,配置文件所在的模块类型为安全模块,则配置文件的类型为security;环境变量包括开发模式、测试模式和生产模式等;预设启动条件可由工作人员进行设置,用来启动所述配置文件对应的数据访问对象配置组件。

配置文件可由工作人员根据不同的模块或不同的环境进行编辑,例如,配置文件为security-dao-${spring.profiles.active}.properties,其中,security为配置文件的类型,表示该配置文件是安全模块的配置类型;${spring.profiles.active}为占位符,springboot将该占位符转化为环境变量。然后,工作人员可在配置文件中设定设置预设启动条件,用来启动相应的数据访问对象配置组件,例如:

#指定profile

spring.profile.active=dev

#开启数据访问对象配置组件条件

config.dao.enabled.security=true

步骤12:根据所述配置文件的类型和所述配置文件的环境变量,加载与所述配置文件对应的数据访问对象配置组件。

数据访问对象(dao)配置组件描述了如何创建透明访问数据源的对象,管理与数据源的连接,以便检索和存储数据。数据访问对象配置组件实现了用来操作数据源的访问机制。数据访问对象配置组件完全向客户端隐藏了数据源实现细节。工作人员可根据具体的业务需要,编写数据访问对象配置组件中的动态参数即可。

springboot可根据配置文件的类型和所述配置文件的环境变量自动加载与配置文件对应的数据访问对象配置组件。

步骤13:利用所述数据访问对象配置组件中的mapper包的至少一个预设包路径,加载每个所述包路径指定的mapper对象,每个所述mapper对象绑定至少一个第一预设数据源。

包是把功能相似或相关的类或接口组织在一起,方便查找和使用。类是相同数据和相同的一组对象的集合,即类是对具有相同数据结构和相同操作的一类对象的描述。对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

数据源是指证据的来源,在数据源中存储了所有建立数据库连接的信息,即通过数据源可以找到相应的数据库连接信息,以便访问该数据库。工作人员根据实际业务操作和环境的不同,将mapper对象绑定访问所需数据库的数据源,即第一预设数据源。

利用mapper包的预设包路径,调取每个预设包路径指定的mapper对象和mapper对象绑定的数据源。工作人员根据实际需求,可设置不同的mapper对象可绑定不同的数据源。

步骤14:根据所述预设启动条件,启动所述配置文件对应的数据访问对象配置组件。

步骤15:在service层的基类中注入父接口,所述父接口关联至少一个第二预设数据源。

service层用来实现数据访问对象配置组件的调用,即service层调用数据访问对象配置组件,然后由数据访问对象配置组件完成数据库的操作。基类注入的父接口中定义基本的保存、删除、更新、查询和复杂查询函数接口,即可通过第二预设数据源访问第二预设数据源连接的数据库,进行保存、删除、更新、查询和复杂查询函数的操作。工作人员根据实际需求,将父接口关联至少一个第二预设数据源。

优选地,父接口以java泛型注入所述service层的基类。java泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。java泛型可在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。

步骤16:在所述service层的实现类继承所述基类的父接口,并获取所有第二预设数据源。

实现类为基类的派生类,其可通过继承来吸收基类的数据属性和行为,并根据自己的类别扩展新的能力。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

service层的实现类继承了基类的父接口,即继承了保存、删除、更新、查询和复杂查询函数的操作,即并在此基础上可扩展其新的能力,例如数据插入等。

步骤17:根据所述service层的实现类和mapper对象,获取与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源。

步骤18:根据与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源,访问所述与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源连接的数据库。

由以上技术方案可知,本申请提供了一种基于springboot在不同环境的数据源接入方法,根据配置文件的类型和环境变量,加载并启动与其相对应的数据访问对象配置组件,然后利用service层的基类和实现类,获取所需的数据源,进而可以访问该数据源连接的数据库。因此,工作人员只需修改配置文件的类型和环境变量,以及预先存储好数据访问对象配置组件,无需工作人员通过硬编码的方式重新配置新的数据源,大大降低工作人员的工作量,提高工作效率,并且提高数据源接入的灵活性。

参见图2,在本申请的另一实施例中,步骤14包括如下步骤:

步骤21:获取springboot的启动类的启动注解。

springboot在默认的情况下,除缺省的数据访问对象配置组件外,其他的数据访问对象配置组件均不启动。工作人员如果要启动特定的数据访问对象配置组件,则需要进行配置。例如,工作人员要启动securitydao,在springboot的启动类中对@springbootapplication注解设置exclude={datasourceautoconfiguration.class}。

步骤22:根据所述启动注解,获取启动所述配置文件对应的数据访问对象配置组件的条件注解。

继续以上例为例,securitydao的条件注解为:@conditional(securitydaoenabled.class)。

步骤23:判断所述条件注解是否与所述预设启动条件相匹配,如果所述启动注解与所述配置文件中启动条件匹配,则执行步骤23。

步骤24:启动所述配置文件对应的数据访问对象配置组件。

springboot根据配置文件中如下的开启条件自动与条件注解进行匹配,如果匹配成功,则启动securitydao。

#指定profile

spring.profile.active=dev

#开启数据访问对象配置组件条件

config.dao.enabled.security=true

由以上方案可知,本实施例可自定义启动特定的数据访问对象配置组件,工作人员可通过动态设置,来实现特定的数据访问对象配置组件的启动,以提高使用的灵活性。

参见图3,在本申请的又一实施例中,步骤18之后还包括:

步骤31:获取所述service层的类的事务管理注解。

步骤32:根据所述事务管理注解,利用所述事务管理注解指定的事务处理器对象和与所述事务处理器对象绑定的数据源,对所述数据源连接的数据库进行数据库事务管理。

springboot提供多种事务管理器,不同的数据库由不同的事务管理器进行数据库事务管理。当工作人员需要使用事务管理时,在类上加上事务管理注解,如,@transactional("securitytransactionmanager"),然后类就会使用事务管理注解指定的事务处理器对象(如securitytransactionmanager)和与其绑定的数据源,对相应的数据库进行数据库事务管理。

参见图4,在本申请的又一实施例中,步骤17还包括如下步骤:

步骤41:根据所述service层的实现类的类型,查找与所述实现类的类型相匹配的mapper对象。

步骤42:将匹配成功的mapper对象注入对应的实现类,并获取所述mapper对象绑定的所有第一预设数据源。

工作人员需根据不同的mapper对象,预先设置与其相对应的实现类,以实现对不同的mapper对象的调用。service层在调用mapper对象时,根据实现类的类型查找与其相匹配的mapper对象,然后将匹配成功的mapper对象注入对应的实现类中,并获取其绑定的第一预设数据源。

第二方面,参见图5,本申请提供了一种基于springboot在不同环境的数据源接入装置,所述装置包括:

加载配置文件模块51,用于加载配置文件,所述配置文件包括所述配置文件的类型、所述配置文件的环境变量和预设启动条件;

加载数据访问对象配置组件模块52,用于根据所述配置文件的类型和所述配置文件的环境变量,加载与所述配置文件对应的数据访问对象配置组件;

加载mapper对象和数据源模块53,利用所述数据访问对象配置组件中的mapper包的至少一个预设包路径,加载每个所述包路径指定的mapper对象,每个所述mapper对象绑定至少一个第一预设数据源;

启动模块54,用于根据所述预设启动条件,启动所述配置文件对应的数据访问对象配置组件;

基类注入模块55,用于在service层的基类中注入父接口,所述父接口关联至少一个第二预设数据源;

实现类继承模块56,用于在所述service层的实现类继承所述基类,以获取所述父接口及父接口关联的数据源;

获取模块57,用于根据所述service层的实现类和mapper对象,获取与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源;

访问模块58,用于根据与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源,访问所述与所述service层的实现类相匹配的mapper对象所绑定的所有第一预设数据源和所有第二预设数据源连接的数据库。

由以上技术方案可知,本申请提供了一种基于springboot在不同环境的数据源接入方法,根据配置文件的类型和环境变量,加载并启动与其相对应的数据访问对象配置组件,然后利用service层的基类和实现类,获取所需的数据源,进而可以访问该数据源连接的数据库。因此,工作人员只需修改配置文件的类型和环境变量,以及预先存储好数据访问对象配置组件,无需工作人员通过硬编码的方式重新配置新的数据源,大大降低工作人员的工作量,提高工作效率,并且提高数据源接入的灵活性。

进一步地,参见图6,所述启动模块54包括:

启动注解获取单元61,用于获取springboot的启动类的启动注解;

条件注解获取单元62,用于根据所述启动注解,获取启动所述配置文件对应的数据访问对象配置组件的条件注解;

判断单元63,用于判断所述条件注解是否与所述预设启动条件相匹配,如果所述启动注解与所述配置文件中启动条件匹配,则启动所述配置文件对应的数据访问对象配置组件。

进一步地,参见图7,所述装置还包括:

事务管理注解模块71,用于获取所述service层的类的事务管理注解;

数据库事务管理模块72,用于根据所述事务管理注解,利用所述事务管理注解指定的事务处理器对象和与所述事务处理器对象绑定的数据源,对所述数据源连接的数据库进行数据库事务管理。

优选地,所述父接口以java泛型注入所述service层的基类。

进一步地,参见图8,所述获取模块57包括:

查找单元81,用于根据所述service层的实现类的类型,查找与所述实现类的类型相匹配的mapper对象;

获取单元82,用于将匹配成功的mapper对象注入对应的实现类,并获取所述mapper对象绑定的所有第一预设数据源。

由以上技术方案可知,本申请提供了一种基于springboot在不同环境的数据源接入方法及装置,根据配置文件的类型和环境变量,加载并启动与其相对应的数据访问对象配置组件,然后利用service层的基类和实现类,获取所需的数据源,进而可以访问该数据源连接的数据库。因此,工作人员只需修改配置文件的类型和环境变量,以及预先存储好数据访问对象配置组件,无需工作人员通过硬编码的方式重新配置新的数据源,大大降低工作人员的工作量,提高工作效率,并且提高数据源接入的灵活性。

本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者或对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以似的一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分可相互参见即可,每个实施例重点说明的都是与其他实施例的不同之处,尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1