分类 大观园 下的文章

做为中小站长来说,一般购买了云服务器之后,可以自己在云服务器ECS上搭建数据库,并不需要另外购买云数据库。但是当网站的数据量规模已经大到一定程度之后,这种应用与数据库不分离的模式就会显露弊端了,会出现服务器反应迟缓卡顿现象。


 

云数据库结合云服务器使用,布局站库分离的网站,这样的站库分离模式速度更快,也减少了数据安全风险,更降低了运营成本。云数据库RDS提供高可用、高可靠、高安全、可扩展的托管数据库服务,性能等同于商业数据库,但是价格相比ECS自建数据库,仅需约1/3,相比自购服务器搭建数据库,仅需约1/10。云数据库与自建数据库的成本比较,请看以下对比表:

价格对比

 

费用云数据库RDSECS自建数据库自购服务器搭建数据库

硬件费用和备品配件费用RDS实例的费用。例如,2 CPU、4 GB内存、存储空间 100 GB(IOPS能力可达到6800)的实例费用是8000元/年。至少需要2台ECS实例作为主备实例。2台2 CPU、4 GB内存、存储空间 100 GB(IOPS能力可达到6800)的ECS实例费用是6800元/年。

至少需要2台数据库服务器。每台IOPS能力达到6800的服务器费用大约是8000元。

1台用于连接前端Web服务器的内网交换机(便宜的1U非网管交换机为1000元左右)。

后期硬件损坏和更换至少还要消耗30%费用。

硬件花费:(8000 × 2 + 1000)× 130% = 22100元。

每年费用:22100元/3 = 7366元(硬件按照3年折旧计算)。


机房托管费用服务商负责,无需付费。服务商负责,无需付费。1U机柜空间托管费用为3000元/年,共有2台1U服务器和1台1U内网交换机需要计费,机房托管费用:3000 × 3 = 9000元。

带宽费用

同一地域内,ECS和RDS可以通过内网互通,且不收取费用。

若在不同地域,ECS和RDS可以通过外网互通,需收取外网流量费用,详细收费标准请参见云数据库RDS详细价格信息。

同一地域内,ECS实例之间可以通过内网互通,不收取费用。

若在不同地域,ECS实例之间可以通过外网互通,需收取外网流量费用,详细收费标准请参见公网带宽计费方式。

只用于内网,不产生公网费用。

数据库运维工程师费用数据库维护由服务商负责,无人员成本。1个初级DBA工程师月薪至少5000/月,假设当前项目占用该工程师30%的工作量,则人员成本为5000 × 12× 30% = 18000元。1个初级DBA工程师月薪至少5000/月,假设当前项目占用该工程师30%的工作量,则人员成本为5000 × 12× 30% = 18000元。

每年总费用8000元/年24800元/年34366元/年

RDS MySQL与自建数据库对比优势

 

对比项RDS MySQLECS自建自购服务器搭建数据库

性价比

弹性资源。

ALISQL提供各种特性功能,提升用户使用感受。

备份有一半实例空间免费。

公网流量免费。

免费使用自带的域名。

更新速度快,紧跟MySQL最新版本。

弹性资源。

开源版无性能优化。

备份空间独立收费。

公网流量收费。

一次投入的沉没成本大。

开源版无性能优化。

需要独立准备备份资源,成本极高。

公网流量收费,域名费用高。

可用性

基础版约15分钟即可完成故障转移。

高可用版和集群版提供自研高可用系统,实现30秒内故障恢复。

只读实例自动实现负载均衡。

读写分离使用方便。

未来会推出分析节点,满足分析型场景需求。

基础版约30分钟完成故障转移。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡服务。

分析型场景需要与分析型数据库结合,搭建难度大、成本高。

单机实例,少则两小时,多则等待配货数周。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡设备。

分析型场景需要与分析型数据库结合,搭建难度大、成本高。

可靠性

数据可靠性高,自动主备复制、数据备份、日志备份等。

MySQL 5.6三节点企业版,实现RPO(Recovery Point Object)=0。

MySQL 5.7三节点企业版(MGR),实现RPO=0、RTO(Recovery Time Objective) < 1分钟。

在好的架构下才能实现高可靠性。

实现RPO=0的成本极高,需要单独购买研发服务。

数据可靠性一般,取决于单块磁盘的损害概率。

实现RPO=0的成本极高,需要单独购买研发服务。

易用性

自动化备份恢复系统,支持按时间点恢复、单库备份恢复等,流式备份对实例性能影响小。

自动化监控告警系统,支持秒级监控,覆盖实例和数据库所有性能指标,支持短信、邮箱、旺旺、钉钉等通道,且根据消费有大额度的免费短信数量。

支持异地容灾。

支持一键版本升级。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买监控系统,在云监控中配置告警系统。

技术实现难度极大。

版本升级成本高。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买或配置监控系统,通道较少,成本较高。

异地数据中心成本极高,技术实现难度也大,很难实现异地容灾。

版本升级成本高。

性能

MySQL的本地SSD盘实例性能极佳。

MySQL的ESSD性能较SSD提升显著。

增加只读实例之后性能强劲且负载均衡。

CloudDBA提供高级优化能力。

SQL洞察满足大部分监控及性能优化数据库场景。

ECS本地盘意味着降低数据可靠性,采用云盘需要规划架构,成本支出较大。

基于ESSD的ECS自建MySQL性能低于基于ESSD的RDS MySQL性能。

实现集群版的难度较高,咨询成本较高,维护成本极高。

依赖资深DBA,支出大,受制于人。

比云计算硬件更新速度慢,性能一般都会低于云数据库。

难以实现计算和存储分离,若使用高端存储实现计算和存储分离,动辄需要数千万支出。

实现集群版的难度较高,咨询成本较高,维护成本极高。

依赖资深DBA,支出大,受制于人。

安全

事前防护:白名单、安全组、专有网络隔离。

事中保护:连接链路加密、数据落盘加密(BYOK覆盖多种存储介质)。

事后审计:SQL洞察、历史事件。

事前防护:白名单、安全组、专有网络隔离。

事中保护:需要单独实现连接链路加密和数据落盘加密,BYOK密钥轮转难度大,咨询成本较高。

事后审计:审计困难,需要单独保存SQL日志。

事前防护:白名单和专有网络隔离的咨询成本较高。

事中保护:需要单独实现连接链路加密和数据落盘加密,BYOK密钥轮转难度大,咨询成本较高。

事后审计:审计困难,需要单独保存SQL日志。

RDS SQL Server与自建数据库对比优势

 

对比项RDS SQL ServerECS自建自购服务器搭建数据库

性价比

弹性资源。

WEB版性价比极高。

备份有一半实例空间免费。

公网流量免费。

弹性资源。

不可使用WEB版。

备份空间独立收费。

公网流量收费。

一次投入的沉没成本大。

不可使用WEB版。

需要独立准备备份资源,成本极高。

公网流量收费,域名费用高。

可用性

基础版约15分钟即可完成故障转移。

高可用版和集群版提供自研高可用系统,实现30秒内故障恢复。

集群版的只读实例自动实现负载均衡。

集群版的读写分离使用方便。

基础版约30分钟完成故障转移。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡服务。

单机实例,少则两小时,多则等待配货数周。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡设备。

可靠性

数据可靠性高,自动主备复制、数据备份、日志备份等。

集群版可实现RPO(Recovery Point Object)=0。

在好的架构下才能实现高可靠性。

实现RPO=0的成本极高,需要单独购买研发服务。

数据可靠性一般,取决于单块磁盘的损害概率。

实现RPO=0的成本极高,需要单独购买研发服务。

易用性

自动化备份恢复系统,支持按时间点恢复、单库备份恢复等,流式备份对实例性能影响小。

自动化监控告警系统,支持秒级监控,覆盖实例和数据库所有性能指标,支持短信、邮箱、旺旺、钉钉等通道,且根据消费有大额度的免费短信数量。

即将支持异地容灾。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买监控系统,在云监控中配置告警系统。

技术实现难度极大。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买或配置监控系统,通道较少,成本较高。

异地数据中心成本极高,技术实现难度也大,很难实现异地容灾。

性能

SQL Server 2008 R2的本地SSD盘实例性能极佳,SQL Server 201x版本新计算存储分离架构可享受硬件红利 。

SQL Server的ESSD性能较SSD提升显著。

增加只读实例之后性能强劲且负载均衡。

CloudDBA提供高级优化能力。

ECS本地盘意味着降低数据可靠性,采用云盘需要规划架构,成本支出较大。

基于ESSD的ECS自建SQL Server性能低于基于ESSD的RDS SQL Server性能。

实现集群版的难度较高,咨询成本较高,维护成本极高。

依赖资深DBA,支出大,受制于人。

比云计算硬件更新速度慢,性能一般都会低于云数据库。

难以实现计算和存储分离,若使用高端存储实现计算和存储分离,动辄需要数千万支出。

实现集群版的难度较高,咨询成本较高,维护成本极高。

依赖资深DBA,支出大,受制于人。

安全

事前防护:白名单、专有网络隔离。

事中保护:连接链路加密、数据落盘加密。

事后审计:SQL审计(数据库审计)、历史事件。

微软安全更新,阿里技术兜底。

事前防护:白名单、安全组、专有网络隔离。

事中保护:需要单独实现连接链路加密和数据落盘加密,咨询成本较高。

事后审计:审计困难,需要单独保存SQL日志。

事前防护:白名单和专有网络隔离的咨询成本较高。

事中保护:需要单独实现连接链路加密和数据落盘加密,咨询成本较高。

事后审计:审计困难,需要单独保存SQL日志。

法律

附带License,无法律风险。

即将支持自带License,降低整体成本支出。

只有单独购买License。只有单独购买License,否则法律风险极大。

RDS PostgreSQL与自建数据库对比优势

 

对比项RDS PostgreSQLECS自建自购服务器搭建数据库

性价比

弹性资源。

内核优化,提供各种特性功能,提升用户使用感受。

备份有一半实例空间免费。

公网流量免费。

免费使用自带的域名。

更新速度快,紧跟PostgreSQL最新版本。

弹性资源。

开源版无性能优化。

备份空间独立收费。

公网流量收费。

一次投入的沉没成本大。

开源版无性能优化。

需要独立准备备份资源,成本极高。

公网流量收费,域名费用高。

可用性

基础版约15分钟即可完成故障转移。

高可用版提供自研高可用系统,实现30秒内故障恢复。

只读实例自动实现负载均衡。

基础版约30分钟完成故障转移。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡服务。

单机实例,少则两小时,多则等待配货数周。

需要单独购买高可用系统。

需要单独实现或者购买负载均衡设备。

可靠性

数据可靠性高,自动主备复制、数据备份、日志备份等。

支持设置保护级别,最高RPO=0。

在好的架构下才能实现高可靠性。

实现RPO=0的成本极高,需要单独购买研发服务。

数据可靠性一般,取决于单块磁盘的损害概率。

实现RPO=0的成本极高,需要单独购买研发服务。

易用性

自动化备份恢复系统,支持按时间点恢复、单库备份恢复等,流式备份对实例性能影响小。

自动化监控告警系统,覆盖实例和数据库所有性能指标,支持短信、邮箱、旺旺、钉钉等通道,且根据消费有大额度的免费短信数量。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买监控系统,在云监控中配置告警系统。

无自动备份系统,流式备份能力需要单独实现,实现按时间点恢复功能成本高。

需要单独购买或配置监控系统,通道较少,成本较高。

性能

PostgreSQL的本地SSD盘实例性能极佳。

PostgreSQL的ESSD性能较SSD提升显著。

增加只读实例之后性能强劲且负载均衡。

CloudDBA提供高级优化能力。

SQL审计(数据库审计)满足大部分监控及性能优化数据库场景。

ECS本地盘意味着降低数据可靠性,采用云盘需要规划架构,成本支出较大。

基于ESSD的ECS自建PostgreSQL性能低于基于ESSD的RDS PostgreSQL性能。

依赖资深DBA,支出大,受制于人。

比云计算硬件更新速度慢,性能一般都会低于云数据库。

难以实现计算和存储分离,若使用高端存储实现计算和存储分离,动辄需要数千万支出。

依赖资深DBA,支出大,受制于人。

安全

事前防护:白名单、安全组、专有网络隔离。

事中保护:连接链路加密、云盘加密。

事后审计:SQL审计(数据库审计)、历史事件。

事前防护:白名单、安全组、专有网络隔离。

事中保护:需要单独实现连接链路加密。

事后审计:审计困难,需要单独保存SQL日志。

事前防护:白名单和专有网络隔离的咨询成本较高。

事中保护:需要单独实现连接链路加密。

事后审计:审计困难,需要单独保存SQL日志。

综合上面的对比表格,尊托云数给大家总结一下云数据库与传统自建数据库的对比如下:


1.       服务可用性:    在服务可用性方面,云数据库RDS是99.95%可用的;而在自购服务器搭建的传统数据库服务中,需自行保障, 自行搭建主从复制,自建RAID等。 


2.       数据可靠性:    对数据的可靠性来说,云数据库RDS是保证99.9999%可靠的;而在自购服务器搭建的传统数据库服务中,需自行保障, 自行搭建主从复制,自建RAID等。


3.       系统安全性:    云数据库RDS可防DDoS攻击,流量清洗,能及时有效地修复各种数据库安全漏洞,而在自购服务器搭建的传统数据库,则需自行部署,价格高昂,同时也需自行修复数据库安全漏洞。


4.       数据库备份:   云数据库RDS可自动为数据库进行备份,而自购服务器搭建的传统数据库需自行实现,同时需要寻找备份存放空间以及定期验证备份是否可恢复。


5.       软硬件投入:   云数据库RDS无软硬件投入,并按需付费;而自购服务器搭建的传统数据库服务器成本相对较高,对于SQL Server需支付许可证费用。


6.       系统托管:    云数据库RDS无需托管费用,而自购服务器搭建的传统数据库每台2U服务器每年超过5000元(如果需要主从,两台服务器需超过10000元/年)。


7.       维护成本:    云数据库RDS无需运维,而自购服务器搭建的传统数据库需招聘专职DBA来维护,花费大量人力成本。


8.       部署扩容:    云数据库RDS即时开通,快速部署,弹性扩容,按需开通,而自购服务器搭建的传统数据库需硬件采购、机房托管、部署机器等工作,周期较长。


9.       资源利用率:    云数据库RDS按实际结算,100%利用率,而自购服务器搭建的传统数据库需考虑峰值,资源利用率很低。


现在大的云计算服务商都有提供云数据库产品,比如:腾讯云云数据库、阿里云云数据库、华为云云数据库等等(正在进行的品牌云数据库1折抢购活动可进入尊托云数:9i0i.com了解详情)。大型网站应用有必要购买云数据库,有利于网站的健康稳定运营及长期发展。一般需要云数据库的行业应用场景主要有:电商/金融类网站、游戏数据缓存、大数据计算,连接大数据存储、计算和可视化引擎等。

————————————————

版权声明:本文为CSDN博主「xtyly1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xtyly1/article/details/107154098/


作者:华为云开发者社区
链接:https://www.zhihu.com/question/19656397/answer/492063096
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

云服务器和传统服务器的区别主要是:

云服务器是实现软硬件解耦的,通常是部署在虑拟化平台之上的,对外提供的是一个服务,用户可以像使用自来水一样方便来使用,实现一个按需收费的特点。而传统服务器软件是强依赖于硬件设备的,用户需一次买断其使用权,是独享的。

总结几点:

a、稳定:云服务器ECS,实例可用性达99.95%,数据可靠性不低于99.999%,自动宕机迁移,自动快照备份,数据恢复更方便。

传统服务器,传统服务器受限于硬件可靠性,易出问题。需手工备份,人工数据恢复困难、耗时

b、弹性:云服务器ECS,自由配置CPU、内存、带宽,可随时升级,升级配置数据不丢失,业务暂停时间可控

传统服务器,固定配置,难以满足各类需求,改配置需硬件升级,周期长,服务停止时间不可控

c、安全:云服务器ECS,免费提供DDoS防护、木马查杀、防暴力破解等服务,可轻松实现多用户对多服务器的访问控制

传統服务器,需额外购买、部署各种安全措施,基本上做不到多用户对多服务器访问控制

d、成本:云服务器ECS,高性价比,支持包年包月或按量计费,满足不同需求,无需服务器网络和硬件等维护,0成本运维

传统服务器,租用费用高,只能包年包月购买,大量人员负责机器运维,成本高

e、易用性:云服务器ECS,丰富的操作系统和应用软件,通过镜像可一键简单部署,同一镜像可在多台ECS中快速复制环境,轻松扩展

传统服务器,几乎不提供任何软件支持,新增服务器需人工重复所有的部署操作

f、可拓展性:云服务器ECS,ECS可与华为云各种丰富的云产品无缝衔接,可持续为业务发展提供完整的计算、存储、安全等解决方案

传统服务器,很难在同一服务商內找到完整的服务,不能保证业务増长的可扩展性和持续性

更多精彩内容可以关注 华为云技术宅基地


https://max.book118.com/html/2018/0502/164325853.shtm

背景:模拟用户真实场景,在windows 2012R2上部署MSSQL ,并用HammerDB跑压力

1.创建新的数据库

在windows开始菜单,打开SQL Server Management Studio,创建一个新的数据库--->用HammerDB跑压力




2.运行Hammer DB

3.使用HammerDB在windows下跑MSSQL

3.1双击SQL Server,选择MSSQL Server,点击ok


3.2选择“TPC-C”-->"Schema Build"-->"Options"


3.3双击“Options”,会弹出“Microsoft SQL Server TPC-C Build  Options”对话框

把“Number of warehouses”至少设置为800;“Virtual User to Build Schema”设置为3。点击ok,回到主窗口


3.4双击“Schema Build”下“Build”,开始构建schema。通常需要几个小时才能完成(具体时间长短因前面设置的warehouse、virtual users大小而异)。


schema构建完成后,“status”下扳手图标会变成绿色“√”。

3.5点击交通灯形状的按钮(从左到右第十个)

3.6点击展开“Driver Script”,双击options按钮--->弹出另一个窗口,点击“ok”回到主窗口,点击‘load’载入脚本



3.7在‘virtual user’下双击‘options’,其中‘virtual users’数量不应超过50,最好和server cpu核数相等;‘Iteration’为设置迭代次数(让压力跑多少次)


3.9 ‘creat’创建用户,‘run’开始进行压力测试



————————————————

版权声明:本文为CSDN博主「西域火龙油」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012439646/article/details/78348159


K网很多优秀的软件或源码都是通过Github分享的,但是国内Github访问的速度实在不敢恭维,今天偶然发现了这款插件,特意推荐给大家!

【chrome插件】Github加速插件


简介:国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~!用途:能提高中国开发者访问GitHub的速度,提升克隆Git仓库的速度,提升下载release包的下载速度。用户为何安装:提高中国软件开发者的工作效率,使他们能跟专注的开发软件。

【chrome插件】Github加速插件【chrome插件】Github加速插件

使用方法:
直接安装到chrome浏览器或chrome内核浏览器扩展程序中

【chrome插件】Github加速插件


访问github的页面时,访问缓慢或者直接无法打开时,就直接点击插件,再次点击GitHub加速即可加速访问Github页面。


本插件Github地址:https://github.com/fhefh2015/Fast-GitHub

蓝奏下载地址:https://xiaok.lanzoux.com/i5llThzttsd


学习springcloud之前可以参考本文回顾基础知识,需要有Maven+springmvc+mybatis+mysql基础

1.Maven的分包分模块架构

一个Project带着多个Module子模块

ServiceCloud父工程(Project)管理依赖

包含3个子模块(Module)


cloud-api:封装的整体Entity/接口/公共配置等

cloud-provider-dept-8001:微服务落地的服务提供者

cloud-consumer-dept-80:微服务调用的客户端使用

2.创建servicecloud父工程

idea创建一个maven项目,创建好后之后一个src文件和一个pom.xml文件

pom文件内容如下:


<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.shawn</groupId>

<artifactId>service-cloud</artifactId>

<version>1.0-SNAPSHOT</version>

<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>

<junit.version>4.12</junit.version>

<log4j.version>1.2.17</log4j.version>

<lombok.version>1.16.18</lombok.version>

</properties>


<!--父工程依赖管理-->

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Dalston.SR1</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>1.5.9.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.0.4</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.31</version>

</dependency>

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.0</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-core</artifactId>

<version>1.2.3</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>${log4j.version}</version>

</dependency>

</dependencies>

</dependencyManagement>


<build>

<finalName>service-cloud</finalName>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

</resource>

</resources>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<configuration>

<delimiters>

<delimit>$</delimit>

</delimiters>

</configuration>

</plugin>

</plugins>

</build>


<!--以下是和其他模块依赖,报错可以先注释掉-->

<modules>

<module>cloud-api</module>

<module>cloud-provider-dept-8001</module>

        <module>cloud-consume-dept-80</module>

    </modules>


</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

servicecloud父工程主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类


3.创建cloud-api 封装的整体Entity/接口/公共配置等


直接在父工程上点击右键创建新的Module



next下一步 再Finish

目录结构:



修改Pom文件:


<?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>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>


    <dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

        </dependency>

       

    </dependencies>


    <artifactId>cloud-api</artifactId>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

lombok

在项目中使用Lombok可以减少很多重复代码。比如说getter/setter/toString等方法的编写。

插件安装方法:打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA

如果安装不了可以选择去官网下载jar包,然后本地安装。



配合lombok创建部门Entity:


package com.shawn.springcloud.entites;

import java.io.Serializable;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.experimental.Accessors;


@NoArgsConstructor //无参构造

@AllArgsConstructor//全餐构造

@Data//get/set方法

@Accessors(chain=true)//链式调用

public class Dept implements Serializable// entity --orm--- db_table

{

private Long deptno; // 主键

private String dname; // 部门名称

private String db_source;// 来自那个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库

public Dept(String dname)

{

super();

this.dname = dname;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

4.创建cloud-provider-dept-8001 服务提供者

参照cloud-api创建cloud-provider-dept-8001工程

修改pom.xml文件

<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>


    <parent>

        <artifactId>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>


    <artifactId>cloud-provider-dept-8001</artifactId>


    <dependencies>

        <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->

            <groupId>com.shawn</groupId>

            <artifactId>cloud-api</artifactId>

            <version>${project.version}</version>

        </dependency>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

        </dependency>

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid</artifactId>

        </dependency>

        <dependency>

            <groupId>ch.qos.logback</groupId>

            <artifactId>logback-core</artifactId>

        </dependency>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jetty</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</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>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

新建yml文件,并配置信息


server:

  port: 8001


mybatis:

  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径

  type-aliases-package: com.shawn.springcloud.entites  # 所有Entity别名类所在包

  mapper-locations:

  - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件


spring:

   application:

    name: cloud-dept

   datasource:

    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型

    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包

    url: jdbc:mysql://localhost:3306/clouddb01              # 数据库名称

    username: root

    password: 123456

    dbcp2:

      min-idle: 5                                           # 数据库连接池的最小维持连接数

      initial-size: 5                                       # 初始化连接数

      max-total: 5                                          # 最大连接数

      max-wait-millis: 200                                  # 等待连接获取的最大超时时间

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

工程src/main/resources目录下新建mybatis文件夹后新建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="cacheEnabled" value="true"/><!-- 二级缓存开启 -->

    </settings>

</configuration>

1

2

3

4

5

6

7

8

9

MySQL创建部门数据库脚本

新建数据库直接执行就可以了

DROP DATABASE IF EXISTS cloudDB01;

CREATE DATABASE cloudDB01 CHARACTER SET UTF8;

USE cloudDB01;

CREATE TABLE dept

(

  deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,

  dname VARCHAR(60),

  db_source   VARCHAR(60)

);

INSERT INTO dept(dname,db_source) VALUES('开发部',DATABASE());

INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE());

INSERT INTO dept(dname,db_source) VALUES('财务部',DATABASE());

INSERT INTO dept(dname,db_source) VALUES('市场部',DATABASE());

INSERT INTO dept(dname,db_source) VALUES('运维部',DATABASE());

 

SELECT * FROM dept;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

DeptDao部门接口

@Mapper

public interface DeptDao

{

  public boolean addDept(Dept dept);

 

  public Dept findById(Long id);

 

  public List<Dept> findAll();

}

1

2

3

4

5

6

7

8

9

工程src/main/resources/mybatis目录下新建mapper文件夹后再建DeptMapper.xml

<?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="com.shawn.springcloud.dao.DeptDao">


    <select id="findById" resultType="Dept" parameterType="Long">

   select deptno,dname,db_source from dept where deptno=#{deptno};

  </select>

    <select id="findAll" resultType="Dept">

   select deptno,dname,db_source from dept;

  </select>

    <insert id="addDept" parameterType="Dept">

   INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());

  </insert>

</mapper>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

DeptService部门服务接口

public interface DeptService

{

    public boolean add(Dept dept);

    public Dept    get(Long id);

    public List<Dept> list();

}

1

2

3

4

5

6

DeptServiceImpl部门服务接口实现类

@Service

public class DeptServiceImpl implements DeptService {

    @Autowired

    private DeptDao dao ;

    @Override

    public boolean add(Dept dept)

    {

        return dao.addDept(dept);

    }

    @Override

    public Dept get(Long id)

    {

        return dao.findById(id);

    }

    @Override

    public List<Dept> list()

    {

        return dao.findAll();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

DeptController部门微服务提供者REST

@RestController

public class DeptController {

    @Autowired

    private DeptService service;


    @RequestMapping(value="/dept/add",method=RequestMethod.POST)

    public boolean add(@RequestBody Dept dept)

    {

        return service.add(dept);

    }


    @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)

    public Dept get(@PathVariable("id") Long id)

    {

        return service.get(id);

    }


    @RequestMapping(value="/dept/list",method=RequestMethod.GET)

    public List<Dept> list()

    {

        return service.list();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

DeptProvider8001_App主启动类DeptProvider8001_App

@SpringBootApplication

public class DeptProvider8001_App {

    public static void main(String[] args) {

        SpringApplication.run(DeptProvider8001_App.class,args);

    }

}

1

2

3

4

5

6

构建完成,打开浏览器测试

http://localhost:8001/dept/get/2


http://localhost:8001/dept/list


补充一下项目结构:


5.创建cloud-consumer-dept-80 消费者

参照上文创建出maven工程cloud-consumer-dept-80

修改Pom文件

<?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>service-cloud</artifactId>

        <groupId>com.shawn</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <dependencies>

        <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->

            <groupId>com.shawn</groupId>

            <artifactId>cloud-api</artifactId>

            <version>${project.version}</version>

        </dependency>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </dependency>

        <dependency>

            <groupId>ch.qos.logback</groupId>

            <artifactId>logback-core</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jetty</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

        </dependency>

        <!-- 修改后立即生效,热部署 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>springloaded</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

        </dependency>

    </dependencies>

    <artifactId>cloud-consume-dept-80</artifactId>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

新增yml文件application.yml

server:

  port: 80

1

2

编写配置文件configbean(类似spring里面的applicationContext.xml写入的注入Bean)

package com.shawn.springcloud.cfgbeans;

@Configuration

public class ConfigBean {


    @Bean

    public RestTemplate restTemplate(){

        return new RestTemplate();

    }

}


1

2

3

4

5

6

7

8

9

10

新建DeptController_Consumer部门微服务消费者REST

package com.shawn.springcloud.controller;

@RestController

public class DeptController_Consumer {


    private static final String REST_URL_PREFIX = "http://localhost:8001";


    @Autowired

    private RestTemplate restTemplate;


    @RequestMapping("/consumer/dept/add")

    public boolean add(Dept dept){

        return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);

    }


    @RequestMapping("/consumer/dept/get/{id}")

    public Dept get(@PathVariable("id") Long id ){

        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);

    }


    @RequestMapping("/consumer/dept/list")

    public List<Dept> list(){

        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

注:RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

使用:

restTemplate访问restful接口非常的简单粗暴无脑。(url, requestMap, ResponseBean.class)这三个参数分别代表

REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。


最后主启动类编写

package com.shawn.springcloud;

@SpringBootApplication

public class DeptConsumer80_App

{

  public static void main(String[] args)

  {

   SpringApplication.run(DeptConsumer80_App.class, args);

  }

}

1

2

3

4

5

6

7

8

9



6. 编写完成,最后进行测试

访问消费者接口(注意,是访问消费者的!80端口)

http://localhost/consumer/dept/get/2


http://localhost/consumer/dept/list


END

————————————————

版权声明:本文为CSDN博主「LuckyShawn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_40037053/article/details/85051405