1.spring cloud简介

  Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2.Spring Cloud组成

  Spring Cloud的子项目,大致可分成两类,
一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;
第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。
对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:
  • Spring Cloud Netflix

  是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。

  • Spring Cloud Config

  将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件

  • Spring Cloud Bus

  分布式消息队列,是对Kafka, MQ的封装

  • Spring Cloud Security

  对Spring Security的封装,并能配合Netflix使用

  • Spring Cloud Zookeeper

  对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用

  • Spring Cloud Eureka
  Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。

3.参考资料

https://projects.spring.io/spring-cloud/    springcloud项目官方主页

https://springcloud.cc/  springcloud中文网 有很详细的翻译文档

http://springcloud.cn/  springcloud中文论坛

  

4.构建springcloud基础项目结构

源码下载地址:https://github.com/bangbangw/wfd360-station (选择V1版本)

  

构建完成后的项目结构如图:

  

4.1父项目建立

  我们开发项目,现在基本都用到maven,以及用父子项目,以及公共模块依赖,来构建方便扩展的项目体系;

首先我们建立父项目 wfd360-station,主要是一个pom,管理module,以及管理依赖,规范所有jar包版本等;

我们Springcloud版本 用 Edgware.SR4

Springboot版本 用 1.5.13.RELEASE

修改pom.xml为:

 <?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.0.0</modelVersion> <groupId>com.wfd360.station</groupId>
<artifactId>wfd360-station</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>microservice-common</module>
<module>microservice-station-provider-1001</module>
<module>microservice-station-consumer-80</module>
</modules>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<druid.version>1.1.10</druid.version>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.13.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
</dependencyManagement> </project>

这里引入了 springcloud 以及springboot  包括 druid连接池  以及 属性 规范编译 目标版本,包括连接池版本 编码等信息;

4.2公共模块搭建

我们新建module公共模块项目 microservice-common,主要是放一些其他项目公用的东西,比如实体类,工具类等等;

pom.xml 加下 jpa和 mysql驱动包依赖

 <?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">
<parent>
<artifactId>wfd360-station</artifactId>
<groupId>com.wfd360.station</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>microservice-common</artifactId>
<packaging>jar</packaging> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies> </project>

我们新建Ticket实体

 package com.wfd360.model;

 import javax.persistence.*;
import java.io.Serializable; /**
* Created by admin on 2019/3/25.
*/
@Entity
@Table(name="t_ticket")
public class Ticket implements Serializable {
/**
*序列号b vmvh
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
/**
* 出发车站
*/
@Column
private String startStation;
/**
* 到达车站
*/
@Column
private String stopStation;
/**
* 票价
*/
@Column
private Integer price; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getStartStation() {
return startStation;
} public void setStartStation(String startStation) {
this.startStation = startStation;
} public String getStopStation() {
return stopStation;
} public void setStopStation(String stopStation) {
this.stopStation = stopStation;
} public Integer getPrice() {
return price;
} public void setPrice(Integer price) {
this.price = price;
}
}

包括映射

当然我们数据库里也提前建一个db_station数据库;

4.3microservice-ticket-provider-1001服务提供者项目建立

我们新建一个服务器提供者module子模块,类似前面建的common公共模块,名称是 microservice-ticket-provider-1001

pom.xml为:

 <?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">
<parent>
<artifactId>wfd360-station</artifactId>
<groupId>com.wfd360.station</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>microservice-station-provider-1001</artifactId> <dependencies>
<dependency>
<groupId>com.wfd360.station</groupId>
<artifactId>microservice-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies> </project>

该pom.xml中加common项目依赖,以及 springboot的 web jpa  驱动包 tomcat 连接池 配置 包括自动热部署配置。

application.yml配置:

 server:
port: 1001
context-path: / # 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_station
username: root
password: admin
jpa:
hibernate:
ddl-auto: update
show-sql: true
thymeleaf:
cache: false

注意:空格

TicketRepository接口:
 package com.wfd360.repository;

 import com.wfd360.model.Ticket;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; /**
* Created by 姿势帝-博客园 on 2019/3/25.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/ public interface TicketRepository extends
JpaRepository<Ticket, Integer>,JpaSpecificationExecutor<Ticket> {
}

TicketService接口:

 package com.wfd360.service;

 import com.wfd360.model.Ticket;

 import java.util.List;

 /**
* Created by 姿势帝-博客园 on 2019/3/25.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/ public interface TicketService {
/**
* 添加或者修改车票信息
* @param student
*/
public void save(Ticket student); /**
* 根据id查找车票信息
* @param id
* @return
*/
public Ticket findById(Integer id); /**
* 查询车票信息
* @return
*/
public List<Ticket> list(); /**
* 根据id删除车票信息
* @param id
*/
public void delete(Integer id);
}

TicketServiceImpl实现类:

 package com.wfd360.service.impl;

 import com.wfd360.model.Ticket;
import com.wfd360.repository.TicketRepository;
import com.wfd360.service.TicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; /**
* Created by 姿势帝-博客园 on 2019/3/25.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/
@Service
public class TicketServiceImpl implements TicketService {
@Autowired
private TicketRepository ticketRepository; @Override
public void save(Ticket student) {
ticketRepository.save(student);
} @Override
public Ticket findById(Integer id) {
return ticketRepository.findOne(id);
} @Override
public List<Ticket> list() {
return ticketRepository.findAll();
} @Override
public void delete(Integer id) {
ticketRepository.delete(id);
}
}

TicketProviderController类:

 package com.wfd360.controller;

 import com.wfd360.model.Ticket;
import com.wfd360.service.TicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import java.util.List; /**
* Created by 姿势帝-博客园 on 2019/3/25.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/
@Controller
@RequestMapping("/ticket")
public class TicketController {
@Autowired
private TicketService ticketService;
/**
* 添加或者修改车票信息-V1111
* @param ticket
* @return
*/
@PostMapping(value="/save")
@ResponseBody
public boolean save(Ticket ticket){
try{
ticketService.save(ticket);
return true;
}catch(Exception e){
return false;
}
} /**
* 查询车票信息
* @return
*/
@GetMapping(value="/list")
@ResponseBody
public List<Ticket> list(){
List<Ticket> list = ticketService.list();
return list;
} /**
* 根据id查询车票信息
* @return
*/
@GetMapping(value="/get/{id}")
@ResponseBody
public Ticket get(@PathVariable("id") Integer id){
return ticketService.findById(id);
} /**
* 根据id删除车票信息
* @return
*/
@GetMapping(value="/delete/{id}")
@ResponseBody
public boolean delete(@PathVariable("id") Integer id){
try{
ticketService.delete(id);
return true;
}catch(Exception e){
return false;
}
}
}

启动类TicketProviderApplication_1001:

 package com.wfd360;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* Created by 姿势帝-博客园 on 2019/3/25.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/
@SpringBootApplication
public class TicketProviderApplication_1001 {
/**
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(TicketProviderApplication_1001.class, args); }
}

我们运行启动类,自动生成t_student表;

我们加点数据,方便测试:

浏览器请求:http://localhost:1001/ticket/list

然后添加修改的话 我们借用下 postman插件(请自行测试);

SpringCloud-day01-简介的更多相关文章

  1. SpringCloud Alibaba 简介

    SpringCloud Aliababa简介 SpringCloud Alibaba是阿里巴巴集团开源的一套微服务架构解决方案. 微服务架构是为了更好的分布式系统开发,将一个应用拆分成多个子应用,每一 ...

  2. SpringCloud系列一:SpringCloud的简介和架构

    一.SpringCloud简介 SpringCloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯.熔断.监控等.因此就需要很多 ...

  3. springcloud之简介

    springcloud官方文档翻译网站:https://springcloud.cc/ 一.网站架构的演变过程.(这些架构描述的不是很到位,之后需要从新学习) 传统架构 —> 分布式架构 —&g ...

  4. Netflix OSS 和 SpringCloud Netflix简介

    Netflix OSS Netflix是一家互联网流媒体播放商,是美国视频巨头,随着Netflix转型为一家云计算公司,它也开始积极参与开源项目. Netflix OSS(Open Source)就是 ...

  5. 11.8 Springcloud项目简介

    各位领导好,我从毕业后做了两年Java开发工程师,刚开始都是一些SSM框架的项目,但是由于技术不断更新,微服项目成为必然的趋势,大约在做了1年的SSM框架,之后开始接触微服项目,前后经理过Dubbo和 ...

  6. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  7. SpringCloud微框架系列整体模块梳理

    以下为Spring Cloud的核心功能: 分布式/版本化配置服务注册和发现路由服务和服务之间的调用负载均衡断路器分布式消息传递 通过这张图,我们来了解一下各组件配置使用运行流程: 1.请求统一通过A ...

  8. SpringCloud Gateway入门

    本文是介绍一下SpringCloud Gateway简单路由转发使用. SpringCloud Gateway简介 SpringCloud是基于Spring Framework 5,Project R ...

  9. springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config

    1.Hystrix断路器简介 Hystrix断路器简介 hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因 ...

  10. SpringCloud组件和概念介绍1

    一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及 ...

随机推荐

  1. IC卡冷复位时序

    冷复位(cold reset):当提供给IC卡的电源电压和其他信号从静止状态中复苏且收到复位信号后,IC卡产生的复位. 在触点激活后,终端将发出一个冷复位信号,并从IC卡获得一个复位应答信号,过程如下 ...

  2. Python全栈之路----函数进阶----装饰器

    Python之路,Day4 - Python基础4 (new版) 装饰器 user_status = False #用户登录后改为True def login(func): #传入想调用的函数名 de ...

  3. 原来bug解决了,是这样的感觉

    终于过了,感觉好想哭啊,又莫名其妙的爽,原来这就是bug

  4. 添加一个pv到vg后,误删新加入的pv,报 pv * not found or rejected by a filter

    问题如下 将某一pv加入vg vgextend cl /dev/xvdb1 然后进入fdisk将xvdb1分区删掉,重新创建pv 使用lvdisplay报警告 [root@localhost ~]# ...

  5. php输出数据到csv文件

    function export() { $fileName = date('Y-m-d').uniqid().'.csv'; set_time_limit(0); ini_set('memory_li ...

  6. java 原子性 可见性 有序性

    原子性 原子性是指一个操作或多个操作要么全部执行完成且执行过程不被中断,要么就不执行. 如向变量x赋值操作 x = 10 是原子性的,就不会出现赋值操作进行到一半(x的低16位赋值成功,高16位没有赋 ...

  7. Spark性能优化指南——高级篇

    本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...

  8. word embeddding和keras中的embedding

    训练好的词向量模型被保存下来,该模型的本质就是一个m*n的矩阵,m代表训练语料中词的个数,n代表训练时我们设定的词向量维度.当我们训练好模型后再次调用时,就可以从该模型中直接获取到对应词的词向量. 通 ...

  9. python http请求及多线程应用

    目录 概述 tomorrow包准备 运行环境遇到的问题 其他尝试未果 概述 今天, 使用python3 模拟下发包, http get 请求, 然后 采用tomorrow 多线程. 代码如下: # c ...

  10. GraphicsMagick命令

    [ convert | identify | mogrify | composite | montage | compare | display | animate | import | conjur ...