alibab仓库 idea_01.微服务架构编码、构建
教学视频传送:
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.约定 > 配置 > 编码 2.IDEA新建project工作空间 2.1.微服务cloud整体聚合父工程Project 父工程步 ...
- cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统
任何复杂的应用程序偶尔都会出现错误.在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况.要获取系统的整体视图,日志记录和监控至关重要.在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上 ...
- 微服务架构编码,构建
父工程pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...
- SpringCloud微服务架构学习
SpringCloud 1. 微服务架构理论入门 1.1. 微服务架构概述 微服务架构是一种架构模式,它提倡将单一应用程序划分为一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值.每个服务运 ...
- 面向领域的微服务架构
近来,一些关于面向服务架构的话题,特别是针对微服务架构的弊端这个话题上进行了大量的讨论.虽然在几年前,微服务架构受到很多人的青睐,因为它们提供了许多好处,如独立部署的灵活性.明确的所有权.系统稳定性的 ...
- 微服务架构10条最佳实践
转载自公众号:SpringForAll社区 确保你在分布式系统中,努力实现这些微服务的最佳实践,例如监控和REST成熟度. 使用微服务架构可以解决所有的软件架构的问题,对吗?当然,这是不对的.但是,使 ...
- 日调度5万亿次,腾讯云微服务架构体系TSF深度解读
http://www.infoq.com/cn/news/2018/02/deep-interpretation-TSF-cloud-mi 写在前面 当前,传统企业的IT系统以单体架构为主,在面对互联 ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
- 微服务架构(二):融入微服务的企业集成架构
上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微 ...
最新文章
- linux php任务计划,Linux--PHP脚本的计划任务
- liunx之tar 命令
- 开发日记-20190510
- 【系统平台】大四区部署
- python颜色库_Python可视化_matplotlib08-palettable颜色库(四)
- 话里话外:企业内控的灵魂——企业文化
- endnote 参考文献加序号_EndNote插入文献序号排序混乱怎么破 | 科研动力
- ECshop商城程序常见的97个小问题汇总
- bigemap中下载边界_BIGEMAP地图下载器-全能版
- 怎么用计算机按反三角函数的导数,反三角函数求导过程
- android通用ui库设计规范,难查的ANDROID APPUI设计规范总览
- The World's 100 Greatest Classical Composers
- Atlas 200 DK 开发者套件(1.0.9.alpha)–搭载开发环境
- 中国移动发布COCA软硬一体片上计算架构,引领云计算市场下一个黄金十年
- 测试网络机顶盒的软件,2018网络机顶盒装机必备的几款系统工具,亲测好用
- 车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)
- 战斗在生物信息学前沿的科学“游击战士”—— 纪念郝柏林院士
- UnityShader学习教程之<毛玻璃效果解析>
- 7月19黎明觉醒为什么服务器一直在维护,黎明觉醒游戏卡住了怎么办 游戏卡顿解决方法...
- Win10 打开网站突然出现dns probe started 重置网卡更换网卡,还是会出现
热门文章
- Enterprise Library 2.0 Hands On Lab 翻译(14):加密应用程序块(一)
- 苹果显示已连接网络连接到服务器异常,苹果确认iphone密码,显示连接服务器出现问题,为什么...
- html里面超链接alt_前端html--超链接,表格,表单属性
- c语言意义y x 8.0,C语言符号意义(8页)-原创力文档
- 网站加速和服务器加速区别,cdn加速与不加速区别
- 修改对象的某个属性的值_什么是类,什么是对象
- 线段 LibreOJ - 10007(贪心)
- [蓝桥杯][算法提高VIP]密码锁(BFS)
- 计算机二级考试需要怎么备考,计算机二级ms office应该怎么备考 考试内容是什么...
- 教职工使用计算机管理制度,【学校管理规章制度】教师笔记本电脑使用与管理制度...