1.SpringCloud入门
[toc]
SpringCloud入门1. 微服务简介1.1 微服务的由来
微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
1.2 为什么需要微服务
在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。到后面引入了SOA服务化,但是,由于 SOA 早期均使用了总线模式,这种总线模式是与某种技术栈强绑定的,比如:J2EE。这导致很多企业的遗留系统很难对接,切换时间太长,成本太高,新系统稳定性的收敛也需要一些时间。
1.3 微服务与单体架构区别
单体架构所有的模块全都耦合在一块,代码量大,维护困难。
微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解 ...
0.java.net.URISyntaxException-SpringBoot
1. 出现的问题
在使用eureka的时候,消费者去调用服务的时候报的错,最终定位到调用的url有问题!
java.net.URISyntaxException: Expected scheme-specific part at index 16: PC-20180331PZJY:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566java.net.URISyntaxException: Expected scheme-specific part at index 16: PC-20180331PZJY: at java.net.URI$Parser.fail(URI.java:2848) ~[na:1.8.0_171] at java.net.URI$Parser.failExpecting(URI.java:2854) ~[na:1.8.0_171] at java.net.URI$Pa ...
8.Feign出现404
[toc]
1. 问题描述在使用学习Feign通过接口调用eureka中的服务的时候,在idea中System.out.println(user)能打印出响应的结果;
但是浏览器页面却出现以下情况:
而idea控制台情况是:
2. 知识回顾
@RestController注解相当于@ResponseBody和@Controller的结合
但是在使用@RestController注解的时候需要注意几个问题:
如果使用@RestController注解Controller,那么该Controller中的方法就无法返回jsp页面,就是说如果在方法中return “xx”,那么它只会返回”xx”的内容,因为@RestController中相当于已经有了@RessponseBody的注解效果,所以它无法返回jsp,html界面,配置的InternalResourceViewResolver不工作,只返回return的内容。
根据第一条的规定,如果该Controller中需要返回jsp,html界面,那么就需要使用@Controller注解Controller,不能用@RestCont ...
5.SpringBoot实践
[toc]
SpringBoot实践–整合ssm1.添加启动器12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion> ...
4.pringBoot集成Thymeleaf模板
[TOC]
Thymeleaf模板引擎–快速入门1. 简介
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:
动静结合:Thymeleaf (百里香)在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属 ...
3.SpringBoot入门
[toc]
SpringBoot入门
其实人们把Spring Boot称为**搭建程序的脚手架**。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注于业务而非配置。
我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。
解决java复杂的配置和混乱的依赖管理
1. springboot项目中引入依赖
SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!
需要使用什么模块,需要引入什么启动器!
1234567891011121314151617181920212223242526272829303132333435363738394041424344<?xml version="1.0" encoding="U ...
2.服务调用方式
[toc]
服务调用方式1. RPC和HTTP无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?
常见的远程调用方式有以下2种:
RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表
Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。
现在热门的Rest风格,就可以通过http协议来实现。
如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。
相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么SpringCloud搭建微服务是不二之选。在我们的项目中,我们会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用。
2. Http客户端工 ...
1.系统架构的演变
[toc]
系统架构演变随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构,还有在Google带领下来势汹涌的Service Mesh。我们到底是该乘坐微服务的船只驶向远方,还是偏安一隅得过且过?
1. 集中式架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的**数据访问框架(ORM)**是影响项目开发的关键。
存在的问题:
代码耦合,开发维护困难
无法针对不同模块进行针对性优化
无法水平扩展
单点容错率低,并发能力差
2. 垂直拆分
当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分:
优点:
系统拆分实现了流量分担,解决了并发问题
可以针对不同模块进行优化
方便水平扩展,负载均衡,容错率提高
缺点:
系统间相互独立,会有很多重复开发工作,影响开发效率
3. 分布式服务
当垂直应用越来越多,应用之间交互不可避免 ...
springboot的@ResponseBody的坑
问题描述InterceptorController123456789@Controller@RequestMapping("/interceptor")public class InterceptorController { @GetMapping("/index") public String test(){ return "index"; }}
static/index.html12345678910<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body>hello</body></html>
访问http://localhost:8080/inte ...
15.Spring之JdbcTemplate
[toc]
Spring之JdbcTemplate1. 概述
为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架。
作为Spring JDBC框架的核心,JDBC模板的设计目的是为不同类型的JDBC操作提供模板方法,通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。
可以将Spring的JdbcTemplate看作是一个小型的轻量级持久化层框架。
2. 环境准备2.1 导入JAR包12345678910111213141516// IOC容器所需要的JAR包commons-logging-1.1.1.jarspring-beans-4.0.0.RELEASE.jarspring-context-4.0.0.RELEASE.jarspring-core-4.0.0.RELEASE.jarspring-expression-4.0.0.RELEASE.jar// JdbcTemplate所需要的JAR包spring-jdbc-4.0.0.RELEASE.jarspring-orm-4.0.0.RELEA ...