动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC接入Spring Cloud方案

09-02 17:23 66浏览
举报 T字号
  • 大字
  • 中字
  • 小字

全新开源的轻量级框架Spring Boot开发的项目盛行的时代,仍有很多项目是基于Spring MVC,甚至是基于struts的,这些项目的特点是年代久远,项目庞大,设计文档存在缺漏。但是对于这些项目,我们不能放任不管,一般情况下都是接入Spring Cloud继续沿用。所以,本文主要讲的就是Spring MVC接入Spring Cloud

方案一:Sidecar异构接入

Sidecar项目可以看作老项目的影子项目,由Sidecar负责接入注册中心,并且发起远程调用和被远程调用。两个项目为一个整体对外提供服务。

优势:

sidecar可以无视语言,可以用于代理古老的java项目,也可以异构代理其他语言项目,如php、python、nodejs等sidecar可以在不对老项目进行大规模改造的情况下快速接入SpringCloud微服务,渐进式的做微服务拆分

劣势

增加项目架构和维护的复杂度,多一个项目多一个环境意味着出问题的概率又多一分

Sidecar项目配置

老项目添加HealthController

/**

 * @Usage: 用于健康检查

 */

@RestController

public class HealthController {

    @RequestMapping("/openapi/health/status")

    public Map status(){

        Map map = new HashMap<>(1);

        map.put("status","UP");

        return map;

    }

}

新建sidecar maven项目

引入依赖

<dependencies>

    <!-- sidecar 依赖-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-netflix-sidecar</artifactId>

        <version>2.1.0.RELEASE</version>

    </dependency>

    <!-- eureka 注册中心-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

        <version>2.1.0.RELEASE</version>

    </dependency>

    <!-- hystrix 熔断-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

        <version>2.1.0.RELEASE</version>

    </dependency>

    <!-- feign 声明式服务调用-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-openfeign</artifactId>  

        <version>2.1.0.RELEASE</version>

    </dependency>

</dependencies>

项目启动类加入如下注解

@EnableFeignClients

@EnableSidecar

不用@EnableEurekaClient,因为@EnableSidecar中包含来eureka的注册逻辑

5. 配置文件增加sidecar、eureka、feign、hystrix、ribbon配置

重点讲一下sidecar配置

sidecar:

# 配置接入web的端口

port: 8080

home-page-uri: http://localhost:${sidecar.port}/

# 配置接入web的健康检查rest接口,sidecar将请求该url,用以确定接入应用是否存活.

health-uri: http://localhost:${sidecar.port}/openapi/health/status

方案二:升级SpringBoot并集成SpringCloud组件

一、升级SpringBoot 1.x版本

在不改动Spring版本的情况下引入SrpingBoot,将项目改造为SpringBoot项目

SpringBoot 1.x 引用的Spring 4.x版本,而一般SpringMvc项目也是使用Spring4.x版本,如果使用Spring更老版本或未使用spring则另当别论。

 

二、升级SpringBoot 2.x版本

SpringBoot 2.x版本使用的是Spring5.x版本,升级2.x意味着升级spring并且需要解决spring升级带来的问题

 

三、引入SpringCloud并集成SpringCloud组件

容易遇到的问题集成Eureka时,Cannot create Jersey client错误

问题原因:jersey 与 fastjson 某些版本冲突导致服务无法启动

错误:

Caused by: com.sun.jersey.spi.inject.Errors$ErrorMessagesException: null

解决方案:fastjson升级到 1.2.37以上版本

 

https://github.com/alibaba/fastjson/releases/tag/1.2.37

日期响应为linux时间戳

升级SpringBoot后,原先的日期格式化失效,在不给字段加@JsonFormat注解的情况下便要思考通过全局配置来解决

正常配置

spring.jackson.time-zone=GMT+8

# 指定响应数据格式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

# 指定不返回时间戳

spring.jackson.serialization.write-dates-as-timestamps=false

这样配置后并没有生效,继续查找原因。

去掉@EnableWebMvc后,配置可以生效。

结合WebMvcAutoConfiguration理解@EnableWebMVC

上面介绍Spring MVC接入Spring Cloud的两套完整的方案,当然不排除有更优的解决方案存在,我们就不过多赘述。想了解这两套方案是如何发挥作用,完成Spring MVC接入Spring Cloud的,可以观看本站的Spring Cloud视频教程,里面有详细的讲解。

0人推荐
共同学习,写下你的评论
0条评论
携代码的男孩纸
程序员携代码的男孩纸

24篇文章贡献108038字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消