一、开发环境: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. VBox on 14.04: Kernel driver not installed (rc=-1908) [duplicate]

    这几天刚刚装上Ubuntu的系统开始写Android代码,真心是流畅了很多,但是也出现了很多的问题. 还好 有大神护佑,童鞋博客首页,点击查看吧. 刚刚又遇到了一个新的问题,那就是我想用genymot ...

  2. git,github,gitlab,码云的区别

    git 是版本控制工具. github https://github.com/和gitlab https://about.gitlab.com/都是基于git仓库的web开发流程代码托管平台.两者的区 ...

  3. Python基础之格式化输出、运算符、数字与布尔值互换以及while...else

    python是一天学一点,就这样零零碎碎…… 格式化输出 %是占位符,%s是字符串格式,%d整数格式,%f是浮点数格式 name = input('输入姓名') age = input('输入年龄') ...

  4. Java emoji持久化mysql

    好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf-8字符集保存不了保存不了表情字符,这是为什么呢?因为普通的字符 ...

  5. 【CocoaPods】ERROR: While executing gem ... Gem::DependencyError

    今天安装 CocoaPods 时遇到了这个问题. ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dep ...

  6. 【Mac】解压文件夹中文乱码

    Mac 用的英文系统,发现下载含中文的文件后,解压为乱码,如图所示: 解决方法: 下载一个解压软件:"The Unarchiver" 安装后设置下,如图: 之后设置压缩文件的默认打 ...

  7. 使用eclipse编写和运行java程序(基础)

    1.首先java程序的运行你需要下载和安装JDK,这是java运行的必备环境. 2.在桌面上找到eclipes,双击打开. 3.在eclipes启动的过程中,会弹出一个窗口,让你填写java工作区的保 ...

  8. linux下mysql无法看到3306端口监听

    这个问题搞定了,原因是我的my.cnf有话:skip-network注释掉,然后运行netstat -an|grep 3306 就可以看到了

  9. 阿里云Linxu下的Mysql安装与配置

    说明:本文主要详细介绍了关于如何在阿里云ECS服务器上安装并配置Mysql 环境:Centos 7版本,阿里云部署好系统后会默认安装mariadb数据库 1.删除阿里云自带的MariaDB # rpm ...

  10. WPF 打开网页

    1.利用浏览器打开using System.Diagnostics; Process proc = new System.Diagnostics.Process(); proc.StartInfo.F ...