Spring应用服务的升级方法和存储介质与流程

文档序号:11216017
Spring应用服务的升级方法和存储介质与流程

本发明涉及数据处理领域,更为具体而言,涉及一种spring应用服务的升级方法和计算机可读存储介质。



背景技术:

在相关技术中,常用的升级spring应用服务的做法是重启服务器。具体而言,重启服务器的升级方法可包括:停用java应用服务器,部署升级的spring应用服务器,启动java服务器,让新部署的javabean生效。

现有的升级重启服务器的升级方法,存在不少缺点。例如,对于多家单位协同开发的情况,每家单位都有可能更换版本以解决测试问题。每天频繁地重启应用服务器,会严重影响开发的测试进度和测试效果。而且,对于实时性要求较高的企业(例如,需要提供7*24小时不间断服务的银行)而言,更是会影响应用服务器的时效性。而且,对于采用总分模式(例如,总行负责总体框架和公共业务模块开发,分行负责分行差异化模块开发)开发的企业而言,如果采用重启服务器的方式部署新应用,则需要等待统一的时间窗口进行版本上线,这种方式严重降低升级和开发效率。



技术实现要素:

为解决上述技术问题,本公开提供了一种spring应用服务的升级方法和计算机可读存储介质,能够在不需要停止spring应用服务器的情况下,升级spring应用服务,从而能够让不属于本次升级范围内正在运行的spring应用服务不受影响,显著改善了升级效率。

根据本发明实施方式的第一方面,提供了一种spring应用服务的升级方法,该方法可包括:通过应用上下文管理器接收jar文件的更新请求,判断所述更新请求对应的jar文件的上下文是否存在,若所述jar文件的上下文不存在,则通知类加载器管理器所述更新请求,由所述类加载器管理器判断所述更新请求对应的jar文件的类加载器是否存在,若所述jar文件的类加载器不存在,则由类加载器管理器为所述jar文件创建对应的自定义类加载器,并通知所述自定义类加载器加载所述jar文件中的类对象,所述自定义类加载器加载所述jar文件中的类对象,并与当前在用的上下文的类加载器绑定父子关系。

在一些实施方式中,所述方法还包括:通过应用上下文管理器为所述jar文件创建上下文,以便将所创建的上下文与当前在用的上下文的类加载器绑定父子关系。

在一些实施方式中,所述方法还包括:将所述自定义类加载器设置为应用上下文的类加载器,并刷新应用上下文,以便加载所述jar文件中的javabean。

在一些实施方式中,所述方法还包括:若所述jar文件的上下文存在,则卸载所述jar文件的上下文。

在一些实施方式中,所述方法还包括:若所述jar文件的类加载器存在,则通知该已存在的类加载器关闭,并释放该存在的类加载器。

在一些实施方式中,所述方法还包括:当有应用需要更新时,调用更新jar文件服务接收上传的更新的jar文件,jar文件服务接收完jar文件后,通知所述应用上下文管理器所述jar文件的更新请求。

根据本发明实施方式的第二方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现:通过应用上下文管理器接收jar文件的更新请求,判断所述更新请求对应的jar文件的上下文是否存在,若所述jar文件的上下文不存在,则通知类加载器管理器所述更新请求,由所述类加载器管理器判断所述更新请求对应的jar文件的类加载器是否存在,若所述jar文件的类加载器不存在,则由类加载器管理器为所述jar文件创建对应的自定义类加载器,并通知所述自定义类加载器加载所述jar文件中的类对象,所述自定义类加载器加载所述jar文件中的类对象,并与当前在用的上下文的类加载器绑定父子关系。

实施本发明实施方式提供的spring应用服务的升级方法和计算机可读存储介质,能够在不停用应用服务器的情况下,保证spring应用服务的更新升级,与现有的停用服务器升级的方式相比,能够不影响不属于本次升级范围内、正在运行的spring应用服务,显著提高spring应用服务升级的效率;而且,由于不影响不属于本次升级范围内、正在运行的spring应用服务,也就是说,不会影响协同开发的其他开发方的测试操作,允许各方各自开发自己的javabean并实时生效,在多方协同开发的情形下,能够从整体上会改善开发和测试的效率。

附图说明

图1是根据本发明一种实施方式的spring应用服务的升级方法的流程示意图。

图2是根据本发明一种实施方式的spring应用服务的升级方法的流程图。

具体实施方式

以下结合附图和具体实施方式对本发明的各个方面进行详细阐述。其中,众所周知的模块、单元及其相互之间的连接、链接、通信或操作没有示出或未作详细说明。并且,所描述的特征、架构或功能可在一个或一个以上实施方式中以任何方式组合。本领域技术人员应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。还可以容易理解,本文所述和附图所示的各实施方式中的模块或单元或处理方式可以按各种不同配置进行组合和设计。

下面对本发明实施方式描述中用到的术语进行简要说明,需要说明的是,虽然此处对术语进行了解释,但不应理解为,这些解释是对这些术语的限制。

java:java是由sunmicrosystems公司于1995年5月推出的java面向对象程序设计语言(以下简称java语言)和java平台的总称。用于开发internet应用程序。java由四方面组成:java编程语言、java文件格式、java虚拟机(jvm)、java应用程序接口(javaapi)。

java程序:由java源码(后缀为.java的文件)编译出来的java字节码(后缀为.class的文件)。

class:中文名称:类对象。在java中,每个class都有一个相应的class对象。也就是说,当我们编写一个类(java源码),编译完成后,在生成的.class文件中,就会产生一个class对象,用于表示这个类的类型信息。

java归档文件:java归档文件有jar(javaarchive中文名称为jar归档文件)、war(webapplicationarchive中文名称为web应用归档文件)、ear(enterprisearchive中文名称为企业级归档文件)等几种类型,java归档文件格式以流行的zip文件格式为基础,文件名后缀为.jar、.war或.ear。java归档文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序。将一个或多个.class文件或其它类型文件(可包含目录结构)可压缩为一个java归档文件。

jvm:jvm是javavirtualmachine(java虚拟机)的缩写,jvm是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。jvm执行程序的过程:i.加载.class文件。ii.管理并分配内存。iii.执行垃圾收集。

classloader:classloader(类加载器)用来加载java类到jvm中。与普通程序不同的是java程序并不是本地的可执行程序。当运行java程序时,首先运行jvm,然后再把class类加载到jvm里头运行,负责加载javaclass的这部分就叫做classloader。

classpath:类路径。是jvm所需的环境变量,用于告诉jvm从哪些目录下或者从哪些jar文件中可以找到所要执行的java程序。

j2ee中间件:中间件是一类软件名,属基础软件和可复用软件。总的作用是为处于自己上层的应用软件提供运行与开发的环境帮助用户开发和集成应用软件。j2ee中间件特指java应用服务器软件,常见的产品化的java应用服务器软件有tomcat、weblogic、websphere等。

java应用服务器:应用服务器主要为应用程序提供运行环境,为组件提供服务。

java应用服务:部署在java应用服务器中,并提供某种服务的java程序。

javabean:一种java语言写成的可重用组件,本质上是一个java类对象,满足如下两个条件:(1)具备无参数构造函数;(2)为成员编写了set、get方法。

spring框架:spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。spring使用基本的javabean来完成以前只可能由ejb(enterprisejavabean)完成的事情。spring框架由七个定义明确的模块组成,本文涉及的是spring-core与spring-context。

spring-core:spring核心容器是spring框架最基础的部分,它提供了依赖注入(dependencyinjection)特征来实现容器对bean的管理。

beanfactory:bean工厂。beanfactory是spring应用的核心,是工厂模式的一个实现,它使用ioc将应用配置和依赖说明从实际的应用代码中分离出来。

spring-context:应用上下文模块。核心模块的beanfactory使spring成为一个容器,而应用上下文模块使它成为一个框架。这个模块扩展了beanfactory的概念,增加了对国际化(i18n)消息、事件传播以及验证的支持。

spring应用服务:部署在spring容器中,并提供某种服务的javabean程序

spring应用服务器:指使用了spring框架的java应用服务器。

本发明实施方式中描述的spring应用服务由一组javabean组成,这些javabean能够实现特定的业务或技术规则,从而实现特定的业务服务。javabean需要部署在spring应用服务器中。

启动spring应用服务器时,由java虚拟机的java类加载器从类路径中加载j2ee中间件软件以及spring框架,再由spring框架中的应用上下文既在用户开发的javabean以及开发所引用的第三方(java程序)等。其中,第三方(java程序)一般为jar格式的java归档文件。用户开发的javabean一般为压缩为一个或多个java归档文件。升级spring应用服务,需要把用户开发的javabean以及第三方(java程序)保存到java应用服务器的java虚拟机能够识别出的类路径下。升级操作会修改类路径下的java程序,需要重新启动java虚拟机,以保证java类记载其能够重新加载java程序,让升级生效。

参见图1,图1是根据本发明一种实施方式的spring应用服务的升级方法的流程示意图,该升级方法可包括:

s101,通过应用上下文管理器接收jar文件的更新请求,判断所述更新请求对应的jar文件的上下文是否存在,若jar文件的上下文不存在,则执行步骤s102,若jar文件的上下文存在,则执行步骤s103,

s102,通知类加载器管理器所述更新请求,由所述类加载器管理器判断所述更新请求对应的jar文件的类加载器是否存在,若jar文件的类加载器不存在,则执行步骤s104,若jar文件的类加载器存在,则执行步骤s105,

s103,卸载所述jar文件的上下文,

s104,由类加载器管理器为所述jar文件创建对应的自定义类加载器,并通知所述自定义类加载器加载所述jar文件中的类对象,

s105,通知该已存在的类加载器关闭,并释放该存在的类加载器,

s106,自定义类加载器加载所述jar文件中的类对象,并与当前在用的上下文的类加载器绑定父子关系。

在本发明的实施方式中,步骤s101中由应用上下文管理器接收jar文件的更新请求,其中,该jar文件可以是通过更新jar文件服务器上传得到的需要更新的jar文件。当有spring应用需要更新时,调用jar文件服务器接收技术人员上传的更新的jar文件,更新jar文件服务接收完技术人员上传的jar文件的更新文件之后,会通知应用上下文管理器有jar文件的更新。

步骤s101中,应用上下文管理器会接收更新jar文件服务发送的更新请求,判断更新请求中对应的jar文件的上下文是否存在,如果存在,那么说明本次更新的jar文件是对原有的jar文件的更新,那么执行步骤s103,将该jar文件对应的上下文卸载;若不存在,那么说明本次更新的jar文件是全新的jar文件的更新,那么执行步骤s102,通知类加载器管理器jar文件的更新请求,由类加载器管理器判断该更新请求对应的jar文件的类加载器是否存在,若jar文件的类加载器不存在,那么说明,该jar文件是原来没有对应的类加载器,则执行步骤s104,由类加载器管理器为该jar文件创建对应的自定义类加载器,并通知该自定义类加载器加载该jar文件中的类对象,若jar文件的类加载器存在,由于存在jar文件的类加载器,需要对其更新,则执行步骤s105,通知该已经存在的类加载器关闭,并释放该已存在的类加载器。

在步骤s104中,类加载器管理器通知新创建的自定义类加载器加载更新的jar文件中的类对象,在步骤106中,自定义类加载器会根据类加载器管理器的通知加载jar文件中的类对象,并与当前在用的上下文的类加载器绑定父子关系。

在本发明的一些实施方式中,应用上下文管理器使用spring框架的filesystemxmlapplicationcontext类为jar文件创建一个对应的上下文为更新的jar文件创建一个对应的上下文,以便将jar文件新创建的上下文与系统当前在用的上下文的类加载器绑定父子关系。

在本发明的一些实施方式中,在将新创建的jar文件的上下文与系统当前在用的上下文的类加载器绑定父子关系之后,可以将系统的应用上下文的类加载器设置为步骤s104创建的自定义类加载器,并且可以通过刷新应用上下文,以便加载jar文件中的javabean。

在一些实施方式中,spring应用服务的升级方法可以如图2所示。

(1)当操作员需要升级spring应用服务时,通过调用更新jar文件服务上传jar文件。

(2)更新jar文件服务接收完更新的jar文件后,通知应用上下文管理器更新。

(3)应用上下文管理器收到更新请求后,首先判断jar文件对应的上下文是否存在,如果存在,则卸载该jar文件对应的上下文。

(4)如果不存在该jar文件的上下文,则应用上下文管理器通知类加载器管理器更新。

(5)类加载器管理器收到更新请求后,首先判断请求更新的jar文件所对应的自定义类加载器是否存在,如果存在,则通知该类加载器关闭,然后释放该类加载器。

(6)自定义类加载器收到关闭请求后,卸载所对应的jar文件。

(7)如果不存在,则类加载器管理器为jar文件创建一个对应的自定义类加载器,并通知该类加载器加载jar文件中的类对象。

(8)自定义类加载器收到加载请求后,加载所指定的jar文件的类对象,并与当前在用的应用上下文的类加载器绑定父子关系。

(9)应用上下文管理器使用spring框架的filesystemxmlapplicationcontext类为jar文件创建一个对应的上下文,然后,与系统当前在用的应用上下文建立父子关系;设置应用上下文的类加载器为第(7)步所创建的类加载器;刷新应用上下文,用来加载jar文件中的javabean。

当java程序需升级jar归档文件中的某个javabean时,该java程序调用应用上下文管理器的获取javabean方法。应用上下文管理器收到请求后,首先判断jar文件对应的上下文是否存在,如果不存在,则调用更新方法(上面描述的(3)-(9))为jar文件创建一个上下文。应用上下文管理器找到对应的上下文后,调用该上下文的getbean方法,并返回调用所得的javabean。

本发明实施方式提供的spring应用服务的升级方法,首先,能够在多方协同开发的情形下,保证一方在升级自己开发的应用服务时,不影响其他各方所开发的spring应用服务,从而提高应用服务升级的效率,而且允许各方各自开发自己的javabean,并且能够实时生效。其次,在升级spring应用服务的同时,不需要停止spring应用服务器,能够让不属于本次升级范围内的、正在运行的spring应用服务不受影响,对于需要提供连续不间断服务的情形而言,尤其适用。

本发明实施方式还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时可以实现:

通过应用上下文管理器接收jar文件的更新请求,判断所述更新请求对应的jar文件的上下文是否存在,

若所述jar文件的上下文不存在,则通知类加载器管理器所述更新请求,由所述类加载器管理器判断所述更新请求对应的jar文件的类加载器是否存在,

若所述jar文件的类加载器不存在,则由类加载器管理器为所述jar文件创建对应的自定义类加载器,并通知所述自定义类加载器加载所述jar文件中的类对象,

所述自定义类加载器加载所述jar文件中的类对象,并与当前在用的上下文的类加载器绑定父子关系。

在一些实施方式中,所述程序被处理器执行时还实现:通过应用上下文管理器为所述jar文件创建上下文,以便将所创建的上下文与当前在用的上下文的类加载器绑定父子关系。

在一些实施方式中,所述程序被处理器执行时还实现:将所述自定义类加载器设置为应用上下文的类加载器,并刷新应用上下文,以便加载所述jar文件中的javabean。

在一些实施方式中,所述程序被处理器执行时还实现:在所述jar文件的上下文存在的情况下,卸载所述jar文件的上下文。

在一些实施方式中,所述程序被处理器执行时还实现:在所述jar文件的类加载器存在的情况下,通知该已存在的类加载器关闭,并释放该存在的类加载器。

在一些实施方式中,所述程序被处理器执行时还实现:当有应用需要更新时,接收上传的更新的jar文件,并在jar文件服务接收完jar文件后,通知所述应用上下文管理器所述jar文件的更新请求。

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

本发明说明书中使用的术语和措辞仅仅为了举例说明,并不意味构成限定。本领域技术人员应当理解,在不脱离所公开的实施方式的基本原理的前提下,对上述实施方式中的各细节可进行各种变化。因此,本发明的范围只由权利要求确定,在权利要求中,除非另有说明,所有的术语应按最宽泛合理的意思进行理解。

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