一、开发环境:jdk  1.8、Maven  3.x、IDEA  2019.1.4、SpringBoot   2.0.7、spring Cloud  最新的稳定版  Finchley SR2   搭配SpringBoot   2.0.7稳定版(https://spring.io/projects/spring-cloud、GA   greneral Availability   正式发布版 、PRE  预览版  内部测试版 、SNAPSHOT 快照版  稳定 但是人在持续更新)

二、修改Maven配置文件

   <mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>

三、微服务架构项目需求

  1、以商品管理模块 做一个微服务架构通用案例  消费者ConsumerClient)   通过REST调用  提供者 Provider(Server)   提供商品的管理服务

  2、Maven的分包 分模块架构(一个Project父工程下有多个Module子模块)

    a:microservice-cloud-01父工程(Project) 下面有3个子工程

    b:microservice-cloud-02-api 封装整体Entity/接口/公共配置

    c:microservice-cloud-03-provider-product-8001 微服务的服务提供者Provider

    d:microservice-cloud-04-consumer-product-80 微服务的消费者 Consumer

  浏览器发送URL请求服务默认端口都是80  只需要输入IP或者域名即可可以省略80

四、Project父工程  microservice-cloud-01删除工程里的src

pom.xml文件中 添加 <packaging>pom</packaging>手动指定pom

<!--springboot  采用2.0.7版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
<relativePath/>
</parent>
<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>
<junit.version>4.12</junit.version>
<!-- spring cloud 采用 Finchley.SR2 版本 -->
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<!--依赖声明-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<!--maven不支持多继承,使用import来依赖管理配置-->
<scope>import</scope>
</dependency>
<!--导入 mybatis 启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>

五、构建公共模块  microservice-cloud-02-api

创建实体类

package cn.zrf.springcloud.entities;

import java.io.Serializable;

public class Product implements Serializable {
private Long pid;
private String productName;
private String dbSource; public Product() {
} public Product(String productName) {
this.productName = productName;
} public Product(Long pid, String productName, String dbSource) {
this.pid = pid;
this.productName = productName;
this.dbSource = dbSource;
} public Long getPid() {
return pid;
} public void setPid(Long pid) {
this.pid = pid;
} public String getProductName() {
return productName;
} public void setProductName(String productName) {
this.productName = productName;
} public String getDbSource() {
return dbSource;
} public void setDbSource(String dbSource) {
this.dbSource = dbSource;
}
}

六、构建服务提供者  microservice-cloud-03-provider-product-8001

1、配置pom配置文件;并跟microservice-cloud-02-api产生关系

<dependencies>
<dependency>
<groupId>cn.zrf</groupId>
<artifactId>microservice-cloud-02-api</artifactId>
<version>${project.version}</version>
</dependency>
<!--springboot web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--导入 mybatis 启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>

2、配置application.yml 文件

server:
port: 8001
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: cn.zrf.springcloud.entities # 所有Entity别名类所在包
mapper-locations: classpath:mybatis/mapper/**/*.xml # mapper映射文件
spring:
application:
name: microservice-product #这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包
url: jdbc:mysql://127.0.0.1:3306/springcloud_db01?serverTimezone=GMT%2B8 # 数据库名称
username: root
password: 169695
dbcp2:
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化连接数
max-total: 5 # 最大连接数
max-wait-millis: 150 # 等待连接获取的最大超时时间

3、创建mapper接口

package cn.zrf.springcloud.mapper;

import cn.zrf.springcloud.entities.Product;

import java.util.List;

public interface ProductMapper {
Product findById(Long pid);
List<Product> findAll();
boolean addProduct(Product product);
}

4、Mybatis  相关的配置 创建mybatis文件夹配置mybatis.cfg.xml文件   文件路径  在mybatis文件夹下建立mappe文件夹写mapper映射文件

  4.1、配置mybatis.cfg.xml文件(配置驼峰命名法)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
</settings>
</configuration>

  4.2、配置mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.zrf.springcloud.mapper.ProductMapper">
<select id="findById" resultType="Product" parameterType="Long">
SELECT pid,product_name,db_source FROM product where pid=#{pid};
</select>
<select id="findAll" resultType="Product">
SELECT pid,product_name,db_source FROM product;
</select>
<insert id="addProduct" parameterType="Product">
INSERT INTO product(product_name,db_source) VALUES(#{productNmae},#{dbSource})
</insert>
</mapper>

5、创建服务层service

package cn.zrf.springcloud.service;

import cn.zrf.springcloud.entities.Product;

import java.util.List;

public interface ProductService {
Product findById(Long pid);
List<Product> findAll();
boolean addProduct(Product product);
} 实现类:
package cn.zrf.springcloud.service.impl; import cn.zrf.springcloud.entities.Product;
import cn.zrf.springcloud.mapper.ProductMapper;
import cn.zrf.springcloud.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class ProductServiceImpl implements ProductService {
@Autowired
ProductMapper productMapper;
@Override
public Product findById(Long pid) {
return productMapper.findById(pid);
} @Override
public List<Product> findAll() {
return productMapper.findAll();
} @Override
public boolean addProduct(Product product) {
return productMapper.addProduct(product);
}
}

6、创建控制层Controoler  提供者

package cn.zrf.springcloud.controller;

import cn.zrf.springcloud.entities.Product;
import cn.zrf.springcloud.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import java.util.List; @RestController
public class ProductController {
@Autowired
private ProductService productService;
@RequestMapping(value = "/product/add",method = RequestMethod.POST)
public boolean add(@RequestBody Product product){
return productService.addProduct(product);
}
@RequestMapping(value = "/product/get/{id}",method = RequestMethod.GET)
public Product get(@PathVariable("id")Long id){
return productService.findById(id);
}
@RequestMapping(value = "/product/get/list",method = RequestMethod.GET)
public List<Product> getAll(){
return productService.findAll();
}
}

7、创建主启动类

package cn.zrf.springcloud;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("cn.zrf.springcloud.mapper")
@SpringBootApplication
public class ProductProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(ProductProvider_8001.class,args);
}
}

七、构建消费者   microservice-cloud-04-consumer-product-80

1、pom.xml配置 跟microservice-cloud-02-api产生关系

<dependencies>
<dependency>
<groupId>cn.zrf</groupId>
<artifactId>microservice-cloud-02-api</artifactId>
<version>${project.version}</version>
</dependency>
<!--springboot web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependencies>

2、配置appicztion.yml 文件

server:
port: 80

3、自定义Rest相关配置类

 @Configuration
public class ConfigBean {
// 向容器中添加RestTemplate 组件 直接该组件调用EREST接口
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}

4、创建控制层 -消费者

@RestController
public class ProductController_Consumer {
private static final String REST_URL_PREFIX="http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer/product/add")
public boolean add(@RequestBody Product product){
return restTemplate.postForObject(REST_URL_PREFIX+"/product/add",product,Boolean.class);
} @RequestMapping(value = "/consumer/product/get/{id}")
public Product get(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX + "/product/get/" + id, Product.class);
} @RequestMapping(value = "/consumer/product/get/list")
public List<Product> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/product/get/list" , List.class);
} }

5、创建启动类

@SpringBootApplication
public class ProductConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(ProductConsumer_80.class,args);
    }
}

Rest构建分布式 SpringCloud微服务架构项目的更多相关文章

  1. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

    Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...

  2. Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...

  3. SpringCloud微服务架构和SOA架构

    1,传统的三层架构 在传统的架构中,SSH,SSM,主要分为web 控制层,业务逻辑层,数据库访问层,单点项目,项目没有拆分,所有的开发任务全部写在一个项目中,耦合度比价高,如果程序中的一个功能出现了 ...

  4. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  5. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  6. SpringCloud微服务架构分布式组件如何共享session对象

    一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...

  7. 关于SpringCloud微服务架构概念的一点理解

    目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式. 1.单体架构单体架构,是指将开发好的项目打成war包,然后发布到tomcat等容器中的应用. 假设你正准备开发一款与Ub ...

  8. springcloud微服务架构搭建

    SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...

  9. 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。

    LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...

随机推荐

  1. MVC WebApi 实现Token验证

    基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB A ...

  2. Openstack中用keypair生成和访问虚机的方法

    Openstack中用keypair生成和访问虚机的方法 标签:task   iso   perm   cte   生成   复制   vol   rsa   sla Openstack中用镜像文件生 ...

  3. C语言和内存

    1.程序的运行 对cpu来说,内存只是一个存放指令和数据的地方,具体的运算在cpu内完成. 1.寄存器(Register) 是CPU内部非常小.非常快速的存储部件,它的容量很有限,对于32位的CPU, ...

  4. django第三次(转自刘江)

    所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数.下面的这些参数是所有字段都可以使用的,并且是可选的. null 该值为True时,Django在数据 ...

  5. [ PyQt入门教程 ] PyQt5信号与槽

    信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经 ...

  6. 泥瓦匠 5 年 Java 的成长感悟(下)

    继续<泥瓦匠 5 年 Java 的成长感悟(上)>,大致包括下面几点: 学技术的心态 学技术的学法 工作的心态 工作的硬技能 工作的软实力 听点雷子的民谣,我就安静地感概感概.上次说写的, ...

  7. Windows上切换java8和java11

    Windows上安装了java8和java11,时不时要切换,于是思考写行命令解决.思路是修改java_home变量.我的java_home变量是设置在系统级别的. 修改环境变量有2个命令,set和s ...

  8. Office2019 VOL版本 自定义安装组件

    众所周知,Office VOL版本可以连接KMS服务器激活,但是office2019没有镜像可以下载,所以只能依靠Office Deployment Tool来进行操作.注:Office2019 Re ...

  9. Spring cloud Feign不支持对象传参解决办法[完美解决]

    spring cloud 使用 Feign 进行服务调用时,不支持对象参数. 通常解决方法是,要么把对象每一个参数平行展开,并使用 @RequestParam 标识出每一个参数,要么用 @Reques ...

  10. Xlistview_聚合菜谱大全数据

    public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{ private ...