spring回顾
- javaSE
- 数据库
- Servlet
- Http
- Mybatis
- Spring
- SpringMVC
- Ajax,json
三层架构 + MVC
框架:
spring IOC AOP
springBoot
模块化 all in one
模块化开发 === all in one 代码没变
微服务的四个核心问题?
1.服务很多,客户端怎么访问?
2.这么多服务?服务之间如何通信?
3.这么多服务?如何治理?注册中心
4.服务挂了怎么办?
解决方案:
Spring Cloud 生态!就是为了解决上面的四个问题.基于springboot
1.Spring cloud NetFlix 一站式解决方案
api网关,zuul组件
Feign —httpClinet — http通信方式同步阻塞
服务注册发现:Eureka
熔断机制:Hystrix
2.Apache Dubbo Zookeeper 半自动需要整合别人的
API:找第三方组件,或者自己实现
Dubbo:基于java的RPC通信框架
Zookeeper
DUbbo这个方案并不完善
3.Spring cloud Alibaba 最新的一站式解决方案
新概念:服务网格~Server Mesh
**什么是微服务?**是一种架构思想,是一种架构模式,架构风格,服务之间可以相互协调,相互配置.
设计模式有23种
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式(池化)。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
什么是Spring Cloud
https://www.springcloud.cc/spring-cloud-netflix.html //Spring Cloud Netflix中文文档
https://www.springcloud.cc/ //Spring Cloud中文文档
好处
spring Cloud特征
Spring Cloud专注于为典型的用例和扩展机制(包括其他用例)提供良好的开箱即用体验。
- Distributed/versioned configuration 分布式/版本化配置
- Service registration and discovery服务注册和发现
- Routing 路由
- Service-to-service calls 服务到服务的调用
- Load balancing负载均衡
- Circuit Breakers 断路器
- Global locks 全局锁
- Leadership election and cluster state 领导选举和集群状态
- Distributed messaging 分布式消息传递
- Routing 路由
- Service registration and discovery服务注册和发现
项目搭建
Rest学习环境搭建服务提供者
微服务:一个服务对应一个数据库或者同一个信息可能存在不同的数据库
微服务定义模块:模块名称-端口号
SpringCloud-4Rest学习环境搭建服务提供者
项目搭建需要用到的依赖
pom.xml中配置
<!-- 热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</art ifactId>
</dependency>
格式:
打包方式:<packaging>pom</packaging>
统一管理版本号:
<properties>
<junit.version>4.12</junit.version>
</properties>
<dependencyManagement> //dependencyManagement :默认版本,在子类的pom中会有默认的版本号,依赖管理
<dependencies>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
pom需要配置的东西
<!--打包方式pom-->
<packaging>pom</packaging>
<!--统一版本号管理-->
<properties>
<junit.version>4.12</junit.version>
<lombok.version>1.18.12</lombok.version>
<spring-cloud-dependencies.version>Greenwich.SR3</spring-cloud-dependencies.version>
<springBoot.version>2.3.1.RELEASE</springBoot.version>
<mysql.version>8.0.20</mysql.version>
<druid.version>1.1.18</druid.version>
<mybatis-spring-boot>2.1.2</mybatis-spring-boot>
<log4j.version>1.2.17</log4j.version>
<logback.version>1.2.3</logback.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springCloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springBoot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springBoot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--SpringBoot依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency><!--日志测试-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
xml中的配置
#spring配置
spring:
application:
name: springcloud-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8
data-username: root
data-password: Root123456application.yml配置:
#pom文件中引入依赖,(用到1.springcloud中的pojo类所以需要把依赖引入)
<dependency>
<groupId>com.xinzhi</groupId>
<artifactId>1.springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
#定义启动端口
server:
port: 8001
#mybatis配置
mybatis:
type-aliases-package: com.xinzhi.pojo
config-location: classpath:mybatis/mapper/mybatis-config.xml //config路径
mapper-locations: classpath:mybatis/mapper/*.xml //mapper.xml的路径
注解解释
@Mapper //表示这个层是mapper层,也就是最原始写出的dao层
@Repository //表示被spring托管
@RestController //提供Restful服务,标明controller层
@PathVariable("id")long id //这个注解一般用在controller传参的括号中,用来绑定字段
@Configuration //相当于定义applicationContext.xml
@Bean注入