教学视频传送:

springBoot和springCloud的版本选型https://start.spring.io/actuator/info

查看json串返回结果

这就是我们的选型依据

本次开发选用版本如下:

cloud         : Hoxton.SR1boot          : 2.2.2.RELEASEcloud alibaba : 2.1.0.RELEASEjava          : java8Maven         : 3.5及以上Mysql         : 5.7及以上

关于Cloud各种组件的停更、升级、替换

约定>配置>编码

IDEA新建project工作空间

微服务cloud整体聚合工程

父工程步骤New Project

聚合总父工程名字

Maven选版本

工程名字

字符编码

注解生效激活

java编译版本选8

File Type过滤

父工程POM

<?xml version="1.0" encoding="UTF-8"?>

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.2.6.RELEASE

com.top

cloud2020-learn

1.0

cloud2020-learn

pom

Demo project for cloud2020-learn

cloud-provider-payment8001

UTF-8

1.8

1.8

4.12

1.2.17

1.16.18

5.1.47

1.1.16

2.2.2.RELEASE

Hoxton.SR1

2.1.0.RELEASE

1.3.0

org.springframework.boot

spring-boot-dependencies

${spring.boot.version}

pom

import

org.springframework.cloud

spring-cloud-dependencies

${spring.cloud.version}

pom

import

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring.cloud.alibaba.version}

pom

import

mysql

mysql-connector-java

${mysql.version}

com.alibaba

druid

${druid.version}

org.mybatis.spring.boot

mybatis-spring-boot-starter

${mybatis.spring.boot.version}

org.projectlombok

lombok

${lombok.version}

true

org.springframework.boot

spring-boot-maven-plugin

true

true

nexus-aliyun

Nexus aliyun

http://maven.aliyun.com/nexus/content/groups/public

true

false

Maven工程落地细节复习

Maven中的DependencyManagement和Dependencies

maven中跳过单元测试

父工程创建完成执行mvn:insall将父工程发布到仓库方便子工程继承

Rest微服务工程搭建

构建步骤

1. Cloud-provider-payment8001 微服务提供者Module模块

- 建module

- 改POM

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

com.alibaba

druid-spring-boot-starter

1.1.10

mysql

mysql-connector-java

org.springframework.boot

spring-boot-starter-jdbc

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

- 写YML

server:port: 8001spring:application:name: cloud-payment-servicedatasource:type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包url: jdbc:mysql://localhost:3306/the_course?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: aaaaaamybatis:mapperLocations: classpath:mapper/*.xmltype-aliases-package: com.top.cloud.provider.payment8001.entities    # 所有Entity别名类所在包

- 主启动

@SpringBootApplicationpublic class CloudProviderPayment8001Application {

public static void main(String[] args) {

SpringApplication.run(CloudProviderPayment8001Application.class, args);

}

}

- 业务类CommonResult

@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonResult

{    private Integer code;    private String  message;    private T       data;    public CommonResult(Integer code, String message)

{        this(code,message,null);

}

}Payment

@Data@AllArgsConstructor@NoArgsConstructorpublic class Payment implements Serializable {    private Long id;    private String name;

}PaymentDao

@Mapperpublic interface PaymentDao {    public int create(Payment payment);    public Payment getPaymentById(@Param("id") Long id);

}PaymentService

public interface PaymentService{    int create(Payment payment);    Payment getPaymentById(@Param("id") Long id);

}PaymentServiceImpl

@Servicepublic class PaymentServiceImpl implements PaymentService{    @Resource

private PaymentDao paymentDao;    @Override

public int create(Payment payment){        return paymentDao.create(payment);

}    @Override

public Payment getPaymentById(Long id){        return paymentDao.getPaymentById(id);

}

}PaymentMapper.xml

insert into payment(name)  values(#{name});

select * from payment where id=#{id};    PaymentController

@RestController@Slf4jpublic class PaymentController{    @Resource

private PaymentService paymentService;    @Value("${server.port}")

private String serverPort;    @PostMapping(value = "/payment/create")

public CommonResult create(@RequestBody Payment payment)

{

int result = paymentService.create(payment);

log.info("*****插入结果:"+result);        if(result > 0)

{            return new CommonResult(200,"插入数据库成功,serverPort: "+serverPort,result);

}else{            return new CommonResult(444,"插入数据库失败",null);

}

}    @GetMapping(value = "/payment/get/{id}")

public CommonResult getPaymentById(@PathVariable("id") Long id)

{

Payment payment = paymentService.getPaymentById(id);        if(payment != null)

{            return new CommonResult(200,"查询成功,serverPort:  "+serverPort,payment);

}else{            return new CommonResult(444,"没有对应记录,查询ID: "+id,null);

}

}

}

- 测试

用postman或者idea自带的HTTPClient测试接口

2. cloud-consumer-order80 微服务消费者订单Module模块

- 建cloud-consumer-order80

- 改POM

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

- 写YML

server:port: 80spring:application:name: cloud-order-service

- 主启动

@SpringBootApplicationpublic class CloudConsumerOrder80Application {

public static void main(String[] args) {

SpringApplication.run(CloudConsumerOrder80Application.class, args);

}

}

- 业务类CommonResult

@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonResult

{    private Integer code;    private String  message;    private T       data;    public CommonResult(Integer code, String message)

{        this(code,message,null);

}

}Payment

@Data@AllArgsConstructor@NoArgsConstructorpublic class Payment implements Serializable {    private Long id;    private String name;

}ApplicationContextConfig

@Configurationpublic class ApplicationContextConfig{    @Bean

//@LoadBalanced

public RestTemplate getRestTemplate(){        return new RestTemplate();

}

}OrderController

@RestController@Slf4jpublic class OrderController{    public static final String PAYMENT_URL = "http://localhost:8001";    @Resource

private RestTemplate restTemplate;    @GetMapping("/consumer/payment/create")

public CommonResult create(Payment payment)

{        return restTemplate.postForObject(PAYMENT_URL +"/payment/create",payment,CommonResult.class);

}    @GetMapping("/consumer/payment/get/{id}")

public CommonResult getPayment(@PathVariable("id") Long id)

{

System.out.println("哈哈");        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);

}    @GetMapping("/consumer/payment/getForEntity/{id}")

public CommonResult getPayment2(@PathVariable("id") Long id)

{

ResponseEntity entity = restTemplate.getForEntity(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);        if(entity.getStatusCode().is2xxSuccessful()){            return entity.getBody();

}else{            return new CommonResult<>(444,"操作失败");

}

}

}

- 测试http://localhost/consumer/payment/get/1

3. 工程重构观察问题: 系统中有重复部分,重构新建cloud-api-common

就是一个最简单的工程改pom

<?xml version="1.0" encoding="UTF-8"?>

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.top

cloud2020-learn

1.0

com.top

cloud-api-common

1.0

cloud-api-common

Demo project for cloud-api-common

1.8

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

true

提取公共部分

maven命令clean install

其他模块依赖 删除各自的原先的entities文件夹

pom中添加:

com.top

cloud-api-common

1.0

修改代码中的依赖路径解决SpringBoot项目repackage failed: Unable to find main class Maven打包 install的问题

发现父项目有一个打包的插件

org.springframework.boot

spring-boot-maven-plugin

repackage

这时,问题就出现了,报打包失败错误!!!解决:如果你的项目是一个放置通用工具类的工程,那么该项目中,就不能包括上面这个打包插件,如果你这个工具类工程依赖有父工程,那么父工程中也不能包括该打包插件,只有你的项目是一个web项目时,含有Main方法的程序入口类,要加该打包插件,我放在了父工程的pom文件中,那就是代表了所有子模块都有这个打包插件,所以报错,解决就是去掉这个插件 ,只在web工程中加入这个打包插件!

目前工程样图

alibab仓库 idea_01.微服务架构编码、构建相关推荐

  1. 微服务架构编码构建 环境配置 热部署配置

    下面有每一步详细步骤: 不懂的可以留言评论. 全部笔记 1.约定 > 配置 > 编码 2.IDEA新建project工作空间 2.1.微服务cloud整体聚合父工程Project 父工程步 ...

  2. cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统

    任何复杂的应用程序偶尔都会出现错误.在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况.要获取系统的整体视图,日志记录和监控至关重要.在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上 ...

  3. 微服务架构编码,构建

    父工程pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...

  4. SpringCloud微服务架构学习

    SpringCloud 1. 微服务架构理论入门 1.1. 微服务架构概述 微服务架构是一种架构模式,它提倡将单一应用程序划分为一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值.每个服务运 ...

  5. 面向领域的微服务架构

    近来,一些关于面向服务架构的话题,特别是针对微服务架构的弊端这个话题上进行了大量的讨论.虽然在几年前,微服务架构受到很多人的青睐,因为它们提供了许多好处,如独立部署的灵活性.明确的所有权.系统稳定性的 ...

  6. 微服务架构10条最佳实践

    转载自公众号:SpringForAll社区 确保你在分布式系统中,努力实现这些微服务的最佳实践,例如监控和REST成熟度. 使用微服务架构可以解决所有的软件架构的问题,对吗?当然,这是不对的.但是,使 ...

  7. 日调度5万亿次,腾讯云微服务架构体系TSF深度解读

    http://www.infoq.com/cn/news/2018/02/deep-interpretation-TSF-cloud-mi 写在前面 当前,传统企业的IT系统以单体架构为主,在面对互联 ...

  8. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  9. 微服务架构(二):融入微服务的企业集成架构

    上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微 ...

最新文章

  1. linux php任务计划,Linux--PHP脚本的计划任务
  2. liunx之tar 命令
  3. 开发日记-20190510
  4. 【系统平台】大四区部署
  5. python颜色库_Python可视化_matplotlib08-palettable颜色库(四)
  6. 话里话外:企业内控的灵魂——企业文化
  7. endnote 参考文献加序号_EndNote插入文献序号排序混乱怎么破 | 科研动力
  8. ECshop商城程序常见的97个小问题汇总
  9. bigemap中下载边界_BIGEMAP地图下载器-全能版
  10. 怎么用计算机按反三角函数的导数,反三角函数求导过程
  11. android通用ui库设计规范,难查的ANDROID APPUI设计规范总览
  12. The World's 100 Greatest Classical Composers
  13. Atlas 200 DK 开发者套件(1.0.9.alpha)–搭载开发环境
  14. 中国移动发布COCA软硬一体片上计算架构,引领云计算市场下一个黄金十年
  15. 测试网络机顶盒的软件,2018网络机顶盒装机必备的几款系统工具,亲测好用
  16. 车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)
  17. 战斗在生物信息学前沿的科学“游击战士”—— 纪念郝柏林院士
  18. UnityShader学习教程之<毛玻璃效果解析>
  19. 7月19黎明觉醒为什么服务器一直在维护,黎明觉醒游戏卡住了怎么办 游戏卡顿解决方法...
  20. Win10 打开网站突然出现dns probe started 重置网卡更换网卡,还是会出现

热门文章

  1. Enterprise Library 2.0 Hands On Lab 翻译(14):加密应用程序块(一)
  2. 苹果显示已连接网络连接到服务器异常,苹果确认iphone密码,显示连接服务器出现问题,为什么...
  3. html里面超链接alt_前端html--超链接,表格,表单属性
  4. c语言意义y x 8.0,C语言符号意义(8页)-原创力文档
  5. 网站加速和服务器加速区别,cdn加速与不加速区别
  6. 修改对象的某个属性的值_什么是类,什么是对象
  7. 线段 LibreOJ - 10007(贪心)
  8. [蓝桥杯][算法提高VIP]密码锁(BFS)
  9. 计算机二级考试需要怎么备考,计算机二级ms office应该怎么备考 考试内容是什么...
  10. 教职工使用计算机管理制度,【学校管理规章制度】教师笔记本电脑使用与管理制度...