CN115729526A - 一种单体和微服务一体化软件开发方法 - Google Patents
一种单体和微服务一体化软件开发方法 Download PDFInfo
- Publication number
- CN115729526A CN115729526A CN202211509215.7A CN202211509215A CN115729526A CN 115729526 A CN115729526 A CN 115729526A CN 202211509215 A CN202211509215 A CN 202211509215A CN 115729526 A CN115729526 A CN 115729526A
- Authority
- CN
- China
- Prior art keywords
- service
- engineering
- class
- micro
- monomer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 84
- 239000000178 monomer Substances 0.000 title claims abstract description 37
- 238000012856 packing Methods 0.000 claims abstract description 4
- 230000003068 static effect Effects 0.000 claims description 33
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 30
- 235000010627 Phaseolus vulgaris Nutrition 0.000 claims description 14
- 244000046052 Phaseolus vulgaris Species 0.000 claims description 14
- 230000002159 abnormal effect Effects 0.000 claims description 4
- 238000002347 injection Methods 0.000 claims description 4
- 239000007924 injection Substances 0.000 claims description 4
- 230000006872 improvement Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000001419 dependent effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种单体和微服务一体化软件开发方法,属于计算机软件技术领域,解决了现有无法自动识别单体和微服务部署模式且无法共用一套前端界面的问题。包括构建通用工程,在其中构建自定义注解类和切面类,以声明自定义注解类为切面类的切入点,通过切面类的前置通知方法及其输入参数,获取声明了自定义注解类的变量对应的实例;构建依赖于通用工程的业务工程,包括模型子工程、API子工程、服务子工程、单体启动子工程和微服务启动子工程;在服务子工程的控制类中定义API子工程中服务接口类的变量,并在变量上声明自定义注解类;对业务工程中单体启动子工程或微服务启动子工程打包,生成当前业务工程的部署包。实现了单体微服务模式的自动识别。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种单体和微服务一体化软件开发方法。
背景技术
随着微服务技术的普及和应用,为保障大型应用系统的稳定性和可维护性,出现了区别于单体的微服务架构及其部署模式。
传统J2EE技术体系下基于Spring框架开发出的软件,只能是单体部署或微服务部署,两种部署方式不能出现在同一项目上,要求软件同时适应两种部署方式时,导致同一个软件需要维护单体版与微服务版两个版本的代码,提高了软件开发的时间成本、人力成本和出错率。传统基于项目的软件开发,在设计之初已决定好部署方式,不存在该问题,但作为平台型软件,需要一种架构方法使平台软件同时具备单体部署与微服务部署、便于切换、便于扩展的特点,在切换部署方式时又不需要修改任何代码及配置,降低软件维护的难度及成本。
现有也存在同时支持单体和微服务的技术方案,有的在技术方案中共用了部分业务逻辑,但是还是需要根据目标业务的需求,分别采用不同的协议发布服务来支持单体架构或微服务架构;有的需要根据实际要部署的环境设置不同的配置项,增加判断服务模式的处理逻辑,才能控制采用不同模式运行程序。这些方案都无法自动识别出单体和微服务模式并获取业务功能。
发明内容
鉴于上述的分析,本发明实施例旨在提供一种单体和微服务一体化软件开发方法,用以解决现有无法自动识别单体和微服务部署模式且无法共用一套前端界面的问题。
本发明实施例提供了一种单体和微服务一体化软件开发方法,包括以下步骤:
构建通用工程,在其中构建自定义注解类和切面类,以声明自定义注解类为切面类的切入点,通过切面类的前置通知方法及其输入参数,在切入点执行之前获取声明了自定义注解类的变量对应的实例;
构建依赖于通用工程的业务工程,包括:模型子工程、API子工程、服务子工程、单体启动子工程和微服务启动子工程;在服务子工程的控制类中定义API子工程中服务接口类的变量,并在变量上声明自定义注解类;
根据部署模式,对业务工程中单体启动子工程或微服务启动子工程打包,生成当前业务工程的部署包。
基于上述方法的进一步改进,构建自定义注解类,包括:声明自定义注解类的名称,设置自定义注解类的作用域为属性字段,自定义注解类的生命周期为运行时。
基于上述方法的进一步改进,切面类作为自定义注解类的切面实现,使用@Aspect与@Component两个标准注解进行定义,用于表示当前类为切面实现,并且在系统初始化时将当前类加载为Bean组件实例。
基于上述方法的进一步改进,通过切面类的前置通知方法及其输入参数,在切入点执行之前获取声明了自定义注解类的变量对应的实例,包括:
根据输入参数中的连接点对象,获取声明了自定义注解类的变量的名称,作为待识别名称;
将待识别名称作为Bean组件名称,从当前启动的业务工程中获取对应的Bean组件实例为实例对象,如果实例对象为空,则将待识别名称作为微服务名称,通过远程微服务的调用方式获取对应的微服务实例为实例对象,如果实例对象仍为空,则返回异常信息,否则,通过依赖注入的方法,将实例对象注入至待识别名称中。
基于上述方法的进一步改进,API子工程中服务接口类使用@FeignClient注解中的path属性定义暴露为微服务时该接口所有方法通用的访问前缀,通过@RequestMapping注解中的value属性定义方法的访问地址,拼接后得到方法的完整访问路径,对应的,在控制层的控制类中定义与API子工程服务接口类相同的方法访问路径。
基于上述方法的进一步改进,单体启动子工程和微服务启动子工程中还包括全局拦截器,全局拦截器继承SpringMVC的HandlerInterceptorAdapter类,用于拦截所有请求路径,获取前缀变量的值返回至前端界面。
基于上述方法的进一步改进,前端界面中各个获取静态资源的路径最前面拼接前缀变量的值。
基于上述方法的进一步改进,前缀变量的值来源于各单体启动子工程和微服务启动子工程的配置文件中的服务访问前缀,且在单体启动子工程中前缀变量的值为空值。
基于上述方法的进一步改进,方法还包括服务网关工程,在其中的网关配置文件中增加服务路由规则,包括:对每个微服务配置服务名称和访问前缀,设置转发规则为false,表示匹配路径时不删除前缀;以通配符的形式增加公共静态资源的访问路径;公共静态资源在单独的静态资源工程下。
基于上述方法的进一步改进,服务网关工程还包括自定义网关路由加载器,其继承Zuul网关默认的路由加载器SimpleRouteLocator类,并重写其中的locateRoutes()方法;在重写后的locateRoutes()方法中,遍历获取的访问路径,如果属于公共静态资源的访问路径,则设置转发规则为true,表示转发后自动去掉前缀。
与现有技术相比,本发明至少可实现如下有益效果之一:
1、以微服务工程结构框架为底座,通过作用在java类全局属性上的自定义注解,自动获取远程的属性实例或本地应用的属性实例,实现单体微服务自动匹配的能力,实现在使用中所有业务工程只需引用统一的接口,无需调整,即可完成不同场景下方法的调用,且两种场景下调用的接口层API、实现层service均为同一个。
2、通过自定义网关路由加载器实现同一套前端在微服务、单体模式下的复用,实现在不改变代码的情况,自由选择单体部署或微服务部署。
3、在不修改任何代码的情况下自动识别出单体与微服务模式,并自适应调用不同模式下的业务功能,达到真正一套业务代码实现两种运行模式的目的,减少了平台/产品研发及维护成本,提升产品适应性和可扩展性。
本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
图1为本发明实施例1中一种单体和微服务一体化软件开发方法流程图。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
本发明的一个具体实施例,公开了一种单体和微服务一体化软件开发方法,如图1所示,包括以下步骤:
S11:构建通用工程,在其中构建自定义注解类和切面类,以声明自定义注解类为切面类的切入点,通过切面类的前置通知方法及其输入参数,在切入点执行之前获取声明了自定义注解类的变量对应的实例。
需要说明的是,本实施例通过自定义注解类作用于声明的变量上,用于判断在工程启动时该变量是以本地实例加载,还是微服务实例加载。
具体来说,构建自定义注解类,包括:声明自定义注解类的名称,设置自定义注解类的作用域为属性字段,自定义注解类的生命周期为运行时。
示例性地,自定义注解类为@ApiScope,通过@Target({FIELD})定义作用域为属性字段,通过@Retention(RUNTIME)定义生命周期为运行时,即该注解在声明的变量被使用时触发。
切面类作为自定义注解类的切面实现,使用@Aspect与@Component两个标准注解进行定义,用于表示当前类为切面实现,并且在系统初始化时将当前类加载为Bean组件实例。
需要说明的是,在切面类的实现方法上配置@Pointcut("@annotation(自定义注解类的全限定类名)")为调用该实现方法的切入点,即以声明自定义注解类为切面类的切入点,使所有使用自定义注解的地方执行该切面实现。再通过@Before注解设置前置通知方法,在切入点执行之前获取声明了自定义注解类的变量对应的实例,从而实现自动识别出被调用的变量是本地实例还是微服务实例,并获取对应的实例对象。因此,前置通知方法中执行的操作是关键,具体包括:
根据输入参数中的连接点对象,获取声明了自定义注解类的变量的名称,作为待识别名称;
将待识别名称作为Bean组件名称,从当前启动的业务工程中获取对应的Bean组件实例为实例对象,如果实例对象为空,则将待识别名称作为微服务名称,通过远程微服务的调用方式获取对应的微服务实例为实例对象,如果实例对象仍为空,则返回异常信息,否则,通过依赖注入的方法,将实例对象注入至待识别名称中。
需要说明的是,前置通知方法的输入参数是连接点对象,其类型是Spring框架提供的JoinPoint类,Spring框架根据@Before注解将声明了自定义注解的变量的名称注入到连接点对象中,从而获取到待识别名称。
获取到待识别名称后,首先从本地启动的业务工程中,调用Spring框架内置的org.springframework.context.ApplicationContext提供的getBean方法,根据待识别名称查找是否有该名称的Bean组件实现,如果能查找到,则说明当前为本地模式调用,如果未查找到,则当前为微服务模式调用,通过SpringCloud提供的DiscoveryClient类获取远端服务的Restful访问地址,通过SpringCloud的RestTemplate类进行远程调用返回微服务远程调用实例。最后,调用Spring中InjectionMetadata类中定义的inject方法,通过依赖注入的机制,将获取的实例对象注入到属性中。如果本地和微服务都无法获取到实例,则提示异常信息。
与现有技术相比,通过作用在java类全局属性上的自定义注解,自动获取远程的属性实例或本地应用的属性实例,实现单体微服务自动匹配的能力。
S12:构建依赖于通用工程的业务工程,包括:模型子工程、API子工程、服务子工程、单体启动子工程和微服务启动子工程;在服务子工程的控制类中定义的API子工程中服务接口类的变量,并在变量上声明自定义注解类。
需要说明的是,业务工程是maven工程,在其配置文件pom.xml中通过定义modules对其中的子工程进行组合声明。根据实际情况,在业务工程中可以建立1个或多个模型子工程、API子工程、服务子工程。
具体来说,模型子工程,用于存储业务模型(数据库表的映射对象)及po、dto等服务交互对象。API子工程为接口服务工程,依赖模型子工程,用于提供对外的服务接口。
服务子工程,用于实现具体的业务功能逻辑,包括控制层controller、服务层service和数据操作层dao,控制层用于接收响应请求,即浏览器的请求都会先调用控制层中的方法,服务层用于处理业务逻辑,同时负责控制数据库事务,数据操作层用于与数据库交互,可根据业务实际需要再划分其它层次。需要说明的是,服务子工程依赖API子工程,实现api子工程中定义的各服务接口,使得服务子工程使用API子工程定义的服务接口时,可以找到对应的业务实现代码。
在服务子工程中控制层的控制类中调用API子工程定义的服务接口时,在定义的API子工程中服务接口类的变量上声明自定义注解类。示例代码如下:
上述代码中,TestController是控制层的一个控制类,其中调用了API子工程中的processRunAPI类,@ApiScope为声明的自定义注解类。当业务系统运行到需要访问processRunAPI时,会先执行切面类中的前置通知方法,在该方法会先在当前业务系统中寻找名称为processRunAPI的Bean组件实例,如果没找到,则按照访问微服务的对应实现的方式,获取微服务实例,如果两者均没有找到则返回异常,实现了同一个功能在单体启动和微服务场景下启动时程序不需要做任何修改。
另外,考虑到实际场景中存在业务工程之间的服务接口调用,在API子工程中对于需要跨工程调用的服务接口类使用@FeignClient注解中的path属性定义暴露为微服务时该接口所有方法通用的访问前缀,通过@RequestMapping注解中的value属性定义方法的访问地址,拼接后得到方法的完整访问路径,对应的,为了同时兼顾单体和微服务两种模式,确保以相同的访问路径调用方法,在控制层的控制类中定义与API子工程服务接口类相同的方法访问地址。
示例性地,在demo业务工程下的API子工程中某服务接口方法定义的访问路径为/api/wTestHoliday/getOneById,则在demo业务工程下的服务子工程中控制层同样也有一个方法访问路径定义为/api/wTestHoliday/getOneById。
需要说明的是,单体启动子工程,用于存放单体启动时需要的配置信息与启动类;微服务启动子工程,用于存放微服务需要的配置信息与启动类。需要注意的是,在微服务调用方的启动类中添加注解@EnableFeignClients,用于开启微服务通过feign调用指定服务下的接口。
示例性地,在流程服务工程需要调用用户中心工程的方法,需要在流程服务工程下微服务启动子工程的启动类中开启并添加用户中心工程中API子工程中服务接口类所在路径:@EnableFeignClients(basePackages={"com.xxx.usercenter.api"})。
进一步地,本实施例除了可以实现单体和微服务模式下引用统一的服务接口和服务实现,还可以实现在不调整代码的情况下,使两种模式下共用一套前端界面资源,实现静态资源加载的一致性。
具体来说,在单体启动子工程和微服务启动子工程中还包括全局拦截器,全局拦截器继承SpringMVC的HandlerInterceptorAdapter类,同时在实现了SpringMVC的WebMvcConfigurer的SpringMvcConfig类中注册该拦截器,使任何请求都先进入该拦截器,获取前缀变量的值返回至前端界面。在前端界面中各个获取静态资源的路径最前面拼接前缀变量的值。而前缀变量的值来源于各单体启动子工程和微服务启动子工程的配置文件中的服务访问前缀,且在单体启动子工程中前缀变量的值为空值。
需要说明的是,在微服务模式下,由微服务的服务网关进行路由转发,为了能正确定位到服务,配置文件中的服务访问前缀设置为当前服务的名称,拦截器将此服务名称传递到前端,服务网关先定位到该值指定的服务,再访问对应的静态资源路径;而在单体模式下,将服务访问前缀设置为空值,拦截器传递到前端也是空值,会直接定位对应的静态资源路径。从而实现单体和微服务两种场景中访问的资源为同一份。
示例性地,前端界面中对静态资源的引用代码为:<link rel="stylesheet"href="${ctx}/css/public.css"/>,其中ctx为前缀变量,${ctx}表示获取ctx的值,当在auth微服务中,配置文件中的服务访问前缀设置为auth,则该静态资源的访问路径为/auth/css/public.css;当在单体模式下,ctx为空值,该静态资源的访问路径为/css/public.css。
考虑到有些静态资源需要在多个业务工程中都使用,如果在每个业务工程中都存放一份,就会导致大量重复代码,达不到公共的目的。因此,本实施例中将公共静态资源放在单独的静态资源工程下,供其它业务工程依赖。但在微服务模式下,公共静态资源调用时不能带有前缀变量,因此本实施例扩展服务网关,自定义了网关路由加载器,对公共静态资源在转发后自动去掉前缀。
具体来说,包括以下步骤:
①构建服务网关工程,在其中的网关配置文件中增加服务路由规则,包括:对每个微服务配置服务名称和访问前缀,设置转发规则为false,表示匹配路径时不删除前缀;以通配符的形式增加公共静态资源的访问路径。
示例性地,在网关配置文件bootstrap.yml中,对auth服务配置如下服务路由规则:
auth:
service-id:auth#服务名称
path:/auth/**#访问前缀
strip-prefix:false#true:删除前缀false:不删除前缀
增加对公共静态资源的访问路径配置如下:
static:
resources:/**/**.css,/**/**.html,/**/**.jpg
②构建自定义网关路由加载器,其继承Zuul网关默认的路由加载器SimpleRouteLocator类,并重写其中的locateRoutes()方法;在重写后的locateRoutes()方法中,遍历获取的访问路径,如果属于公共静态资源的访问路径,则设置转发规则为true,表示转发后自动去掉前缀。即:对公共静态资源动态设置strip-prefix为true。
因此,对公共静态资源,在微服务模式下,网关接收到静态资源的请求路径(如/auth/css/public.css),首先根据路径前缀转发到auth服务,请求进入该服务后,由于该静态资源符合公共静态资源的匹配条件,前缀的作用就没有了,此时会自动去掉前缀,根据拼接前的路径定位到实际的静态资源文件(/css/public.css)。
因此,本实施例通过全局拦截器、前缀变量和自定义网关路由加载器,实现了同一套前端在微服务、单体模式下的复用,而且对于单独提取出来的公共静态资源也能很好地兼顾两种模式。
S13:根据部署模式,对业务工程中单体启动子工程或微服务启动子工程打包,生成当前业务工程的部署包。
需要说明的是,利用maven命令对业务工程中单体启动子工程或微服务启动子工程打包。在进行单体模式部署时,需要将项目中所有程序部署在一起。当根据业务需求中的功能构建了多个业务工程时,在进行单体模式部署时,选择一个业务工程下的单体启动子工程进行打包,该单体启动子工程中的配置文件pom.xml引用了所依赖的模型子工程、API子工程、服务子工程、通用工程和其它业务工程,打包时,所依赖的各子工程和工程分别打成jar文件放在当前业务工程的lib下,最终生成一个当前工程的可运行的单体模式jar文件。部署后,直接将单体模式jar文件启动,在接收到浏览器请求后,直接根据请求地址找到控制类controller,由控制类调用本地的业务方法处理具体的业务请求并返回结果到对应的前端界面中。
在进行微服务模式部署时,对每个业务工程下的微服务启动子工程打包后,均生成的一个可运行的微服务模式jar文件,该jar文件只包括当前的业务工程中的模型子工程、API子工程和服务子工程的jar文件。部署后,依次启动注册中心、配置中心、服务网关、认证中心和各个微服务模式jar文件,由服务网关接收浏览器所有请求,根据请求地址路由到具体的一个服务的控制类,由该控制类调用业务工程内或其它业务工程中的服务接口处理具体的业务请求获取返回结果,再路由到前端界面。其中调用其它业务工程中的API服务接口时,通过调用暴露的Feign接口而获取到服务。
与现有技术相比,本实施例提供的一种单体和微服务一体化软件开发方法,以微服务工程结构框架为底座,通过作用在java类全局属性上的自定义注解,自动获取远程的属性实例或本地应用的属性实例,实现单体微服务自动匹配的能力,实现在使用中所有业务工程只需引用统一的接口,无需调整,即可完成不同场景下方法的调用,且两种场景下调用的接口层API、实现层service均为同一个。通过自定义网关路由加载器实现同一套前端在微服务、单体模式下的复用,实现在不改变代码的情况,自由选择单体部署或微服务部署。在不修改任何代码的情况下自动识别出单体与微服务模式,并自适应调用不同模式下的业务功能,达到真正一套业务代码实现两种运行模式的目的,减少了平台/产品研发及维护成本,提升产品适应性和可扩展性。
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种单体和微服务一体化软件开发方法,其特征在于,包括以下步骤:
构建通用工程,在其中构建自定义注解类和切面类,以声明自定义注解类为切面类的切入点,通过切面类的前置通知方法及其输入参数,在切入点执行之前获取声明了自定义注解类的变量对应的实例;
构建依赖于通用工程的业务工程,包括:模型子工程、API子工程、服务子工程、单体启动子工程和微服务启动子工程;在服务子工程的控制类中定义API子工程中服务接口类的变量,并在变量上声明自定义注解类;
根据部署模式,对业务工程中单体启动子工程或微服务启动子工程打包,生成当前业务工程的部署包。
2.根据权利要求1所述的单体和微服务一体化软件开发方法,其特征在于,所述构建自定义注解类,包括:声明自定义注解类的名称,设置自定义注解类的作用域为属性字段,自定义注解类的生命周期为运行时。
3.根据权利要求2所述的单体和微服务一体化软件开发方法,其特征在于,所述切面类作为自定义注解类的切面实现,使用@Aspect与@Component两个标准注解进行定义,用于表示当前类为切面实现,并且在系统初始化时将当前类加载为Bean组件实例。
4.根据权利要求3所述的单体和微服务一体化软件开发方法,其特征在于,所述通过切面类的前置通知方法及其输入参数,在切入点执行之前获取声明了自定义注解类的变量对应的实例,包括:
根据输入参数中的连接点对象,获取声明了自定义注解类的变量的名称,作为待识别名称;
将待识别名称作为Bean组件名称,从当前启动的业务工程中获取对应的Bean组件实例为实例对象,如果实例对象为空,则将待识别名称作为微服务名称,通过远程微服务的调用方式获取对应的微服务实例为实例对象,如果实例对象仍为空,则返回异常信息,否则,通过依赖注入的方法,将实例对象注入至待识别名称中。
5.根据权利要求1所述的单体和微服务一体化软件开发方法,其特征在于,所述API子工程中服务接口类使用@FeignClient注解中的path属性定义暴露为微服务时该接口所有方法通用的访问前缀,通过@RequestMapping注解中的value属性定义方法的访问地址,拼接后得到方法的完整访问路径,对应的,在控制层的控制类中定义与API子工程服务接口类相同的方法访问路径。
6.根据权利要求1所述的单体和微服务一体化软件开发方法,其特征在于,所述单体启动子工程和微服务启动子工程中还包括全局拦截器,所述全局拦截器继承SpringMVC的HandlerInterceptorAdapter类,用于拦截所有请求路径,获取前缀变量的值返回至前端界面。
7.根据权利要求6所述的单体和微服务一体化软件开发方法,其特征在于,所述前端界面中各个获取静态资源的路径最前面拼接前缀变量的值。
8.根据权利要求6所述的单体和微服务一体化软件开发方法,其特征在于,所述前缀变量的值来源于各单体启动子工程和微服务启动子工程的配置文件中的服务访问前缀,且在单体启动子工程中前缀变量的值为空值。
9.根据权利要求6所述的单体和微服务一体化软件开发方法,其特征在于,所述方法还包括服务网关工程,在其中的网关配置文件中增加服务路由规则,包括:对每个微服务配置服务名称和访问前缀,设置转发规则为false,表示匹配路径时不删除前缀;以通配符的形式增加公共静态资源的访问路径;所述公共静态资源在单独的静态资源工程下。
10.根据权利要求7所述的单体和微服务一体化软件开发方法,其特征在于,所述服务网关工程还包括自定义网关路由加载器,其继承Zuul网关默认的路由加载器SimpleRouteLocator类,并重写其中的locateRoutes()方法;在重写后的locateRoutes()方法中,遍历获取的访问路径,如果属于公共静态资源的访问路径,则设置转发规则为true,表示转发后自动去掉前缀。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211509215.7A CN115729526A (zh) | 2022-11-29 | 2022-11-29 | 一种单体和微服务一体化软件开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211509215.7A CN115729526A (zh) | 2022-11-29 | 2022-11-29 | 一种单体和微服务一体化软件开发方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115729526A true CN115729526A (zh) | 2023-03-03 |
Family
ID=85298931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211509215.7A Pending CN115729526A (zh) | 2022-11-29 | 2022-11-29 | 一种单体和微服务一体化软件开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729526A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180357055A1 (en) * | 2017-06-07 | 2018-12-13 | Syntel, Inc. | System and method for computer language migration |
CN109597610A (zh) * | 2018-12-10 | 2019-04-09 | 南京华苏科技有限公司 | 一种基于微服务架构的应用结构组件化构建方法 |
CN109729149A (zh) * | 2018-12-03 | 2019-05-07 | 国云科技股份有限公司 | 一种基于注解的微服务框架实现方法 |
CN111123765A (zh) * | 2019-12-06 | 2020-05-08 | 山东电工电气集团有限公司 | 基于微服务的电缆隧道综合状态监控系统及其实现方法 |
KR102109461B1 (ko) * | 2020-02-17 | 2020-05-12 | 주식회사 제이윈파트너스 | 마이크로 서비스 아키텍처(msa) 기반의 프로젝트 자동화 지원 시스템 |
CN111782233A (zh) * | 2020-08-05 | 2020-10-16 | 绵阳市智慧城市产业发展有限责任公司 | 微服务多场景部署适配设计模型 |
CN112165507A (zh) * | 2020-08-27 | 2021-01-01 | 福建摩尔软件有限公司 | 单Web项目支持多服务架构的方法、装置、设备和介质 |
CN112463211A (zh) * | 2020-07-28 | 2021-03-09 | 上海汇招信息技术有限公司 | 一种兼容多种开发架构的系统架构改造方法及系统架构 |
CN112491948A (zh) * | 2020-10-12 | 2021-03-12 | 大家信科有限责任公司 | 非侵入式的单体应用微服务化方法、装置及计算机设备 |
CN114579095A (zh) * | 2022-03-03 | 2022-06-03 | 中国农业银行股份有限公司 | 一种基于AspectJ实现AOP的开发方法、装置、设备及介质 |
-
2022
- 2022-11-29 CN CN202211509215.7A patent/CN115729526A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180357055A1 (en) * | 2017-06-07 | 2018-12-13 | Syntel, Inc. | System and method for computer language migration |
CN109729149A (zh) * | 2018-12-03 | 2019-05-07 | 国云科技股份有限公司 | 一种基于注解的微服务框架实现方法 |
CN109597610A (zh) * | 2018-12-10 | 2019-04-09 | 南京华苏科技有限公司 | 一种基于微服务架构的应用结构组件化构建方法 |
CN111123765A (zh) * | 2019-12-06 | 2020-05-08 | 山东电工电气集团有限公司 | 基于微服务的电缆隧道综合状态监控系统及其实现方法 |
KR102109461B1 (ko) * | 2020-02-17 | 2020-05-12 | 주식회사 제이윈파트너스 | 마이크로 서비스 아키텍처(msa) 기반의 프로젝트 자동화 지원 시스템 |
CN112463211A (zh) * | 2020-07-28 | 2021-03-09 | 上海汇招信息技术有限公司 | 一种兼容多种开发架构的系统架构改造方法及系统架构 |
CN111782233A (zh) * | 2020-08-05 | 2020-10-16 | 绵阳市智慧城市产业发展有限责任公司 | 微服务多场景部署适配设计模型 |
CN112165507A (zh) * | 2020-08-27 | 2021-01-01 | 福建摩尔软件有限公司 | 单Web项目支持多服务架构的方法、装置、设备和介质 |
CN112491948A (zh) * | 2020-10-12 | 2021-03-12 | 大家信科有限责任公司 | 非侵入式的单体应用微服务化方法、装置及计算机设备 |
CN114579095A (zh) * | 2022-03-03 | 2022-06-03 | 中国农业银行股份有限公司 | 一种基于AspectJ实现AOP的开发方法、装置、设备及介质 |
Non-Patent Citations (1)
Title |
---|
洪华军;吴建波;冷文浩;: "一种基于微服务架构的业务系统设计与实现", 计算机与数字工程, no. 01, 20 January 2018 (2018-01-20) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951233B (zh) | 混合模式智能手机应用开发框架系统 | |
US11481247B2 (en) | Computer-implemented systems and methods for service provisioning | |
US6871345B1 (en) | Self managing software agents with introspection | |
CN102413022B (zh) | 一种应用调试方法和系统 | |
AU638138B2 (en) | Methods and apparatus for implementing data bases to provide object-oriented invocation of applications | |
US6996832B2 (en) | System and method for software component plug-in framework | |
US7278133B2 (en) | Index-based parameter access and software for using the same | |
US20060150188A1 (en) | Method and apparatus for supporting soft real-time behavior | |
US7770159B2 (en) | Virtual types | |
US11995453B2 (en) | Method and apparatus for generating image file and computer-readable storage medium | |
RU2359316C2 (ru) | Способ администрирования компонентов программного обеспечения, интегрированных в мобильную систему | |
US7577541B1 (en) | Test services provider | |
CN115543546A (zh) | 一种基于Spring的模块热部署方法及系统 | |
US20040172407A1 (en) | Method and system of processing an encapsulated file at a management computer | |
US7941454B2 (en) | Apparatus, methods and computer programs for monitoring processing in a data processing system or network | |
US20220326939A1 (en) | Mobile service upgrade method and apparatus, and terminal | |
CN115729526A (zh) | 一种单体和微服务一体化软件开发方法 | |
CN113568603B (zh) | 组件对象创建及接口方法调用方法、终端及存储装置 | |
CN114860202A (zh) | 项目运行方法、装置、服务器及存储介质 | |
US11449581B2 (en) | Flexible license sourcing at customer sites | |
CN108008983B (zh) | 基于单进程的多接口数据处理方法 | |
US7082376B1 (en) | State full test method executor | |
CN115658187A (zh) | 基于面向切面编程的类实现方法、装置、设备及介质 | |
CN116450103A (zh) | 接口注册、执行方法、装置和管理系统 | |
CN116431308A (zh) | 一种多算法调度方法、装置、设备及存储介质 |
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 |