Gitee

架构设计 | 分布式事务①概念简介和基础理论

心不动则不痛 提交于 2020-08-10 23:52:30
本文源码: GitHub·点这里 || GitEE·点这里 一、分布式事务简介 1、转账经典案例 跨地区和机构的转账的业务在实际生活中非常常见,基础流程如下: 账户01通过一系列服务和支付的流程,把钱转入账户02,在这一过程中,如果账户01出现出账成功,但是账户02没有入账,这就导致数据不一致,违反了基本的事务原则。基于数据归属在不同服务和不同的数据库中,这种情况下的事务出错被称为分布式事务问题。 2、基本概念 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 如上的转账案例,看似只有一次的转账操,实际上由不同的服务不同数据库的多个细节操作组成,这些无感知的细节操作分布在不同服务上,甚至属于不同的地区和应用,如何保证这些操作全部成功或者全部失败,即保证不同数据库间的数据一致性,这就是分布式事务需要解决的核心问题。 3、分布式事务特点 基于如下电商业务场景,基本分布式的架构思路: 数据库基于业务特点,进行分库分表; 数据库拆分,随之就是业务的服务化(SOA); 基于电商业务进行拆分,会出现常见的:订单,用户,库存,物流等一系列的服务,管理不同的业务数据库,在实际的下单支付应用场景下,需要同时操作用户,订单,库存等多个服务,就必须保证数据一致性,下单支付成功,库存必须就需要用到分布式事务。 二、CAP基础理论 1、基础简介

Java并发编程(05):悲观锁和乐观锁机制

雨燕双飞 提交于 2020-08-10 23:37:34
本文源码: GitHub·点这里 || GitEE·点这里 一、资源和加锁 1、场景描述 多线程并发访问同一个资源问题,假如线程A获取变量之后修改变量值,线程C在此时也获取变量值并且修改,两个线程同时并发处理一个变量,就会导致并发问题。 这种并行处理数据库的情况在实际的业务开发中很常见,两个线程先后修改数据库的值,导致数据有问题,该问题复现的概率不大,处理的时候需要对整个模块体系有概念,才能容易定位问题。 2、演示案例 public class LockThread01 { public static void main(String[] args) { CountAdd countAdd = new CountAdd() ; AddThread01 addThread01 = new AddThread01(countAdd) ; addThread01.start(); AddThread02 varThread02 = new AddThread02(countAdd) ; varThread02.start(); } } class AddThread01 extends Thread { private CountAdd countAdd ; public AddThread01 (CountAdd countAdd){ this.countAdd = countAdd

基于layui的中国省市复选框组件

痞子三分冷 提交于 2020-08-10 23:34:54
介绍 自己开发的一个系统使用的是layui前端框架,需要实现中国省市的多选,就实现了一个基于layui的省市复选框组件,分享给大家。 Gitee码云地址: https://gitee.com/youyoudanshui/layui-regionCheckBox Layui第三方组件平台地址: https://fly.layui.com/extend/regionCheckBox/ 使用示例 <div id="regionTest"></div> layui.config({ base: '../../../layui_exts/' //配置组件存放的基础目录 }).extend({ regionCheckBox: 'regionCheckBox/regionCheckBox' //定义组件模块名 }).use(['regionCheckBox'], function(){ var $ = layui.$; var regionCheckBox = layui.regionCheckBox; //执行实例 regionCheckBox.render({ elem: '#regionTest', name: 'region', //input name value: ['北京', '内蒙古', '江西-九江'], //赋初始值 width: '550px', //默认550px

尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...

余生长醉 提交于 2020-08-10 21:56:02
最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了。可能看到这个名字,很多读者会有点陌生。但是,只要给大家看一下这两个依赖,你就知道了! <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency> 当我们在使用Spring MVC写接口的时候,为了生成API文档,为了方便整合Swagger,都是用这个SpringFox的这套封装。但是,自从2.9.2版本更新之后,就一直没有什么动静,也没有更上Spring Boot的大潮流,有一段时间还一直都是写个配置类来为项目添加文档配置的。为此,之前就造了这么个轮子: https://github.com/SpringForAll/spring-boot

Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车

↘锁芯ラ 提交于 2020-08-10 21:49:39
让我们来实现一个简单的 “电商购物车” 需求来了解一下如何使用 Newbe.Claptrap 进行开发。 业务需求 实现一个简单的 “电商购物车” 需求,这里实现几个简单的业务: 获取当前购物车中的商品和数量 向购物车中添加商品 从购物车中移除特定的商品 安装项目模板 首先,需要确保已经安装了 .NetCore SDK 3.1 。 可以点击此处来获取最新的版本进行安装 。 SDK 安装完毕后,打开控制台运行以下命令来安装最新的项目模板: dotnet new --install Newbe.Claptrap.Template 安装完毕后,可以在安装结果中查看到已经安装的项目模板。 创建项目 选择一个位置,创建一个文件夹,本示例选择在 D:\Repo 下创建一个名为 HelloClaptrap 的文件夹。该文件夹将会作为新项目的代码文件夹。 打开控制台,并且将工作目录切换到 D:\Repo\HelloClaptrap 。然后运行以下命令便可以创建出项目: dotnet new newbe.claptrap --name HelloClaptrap 通常来说,我们建议将 D:\Repo\HelloClaptrap 创建为 Git 仓库文件夹。通过版本控制来管理您的源码。 编译与启动 项目创建完成之后,您可以会用您偏爱的 IDE 打开解决方案进行编译。 编译完成后,通过 IDE 上

JApiDocs 动态生成接口文档,并解析java 源码中的注释

痞子三分冷 提交于 2020-08-10 20:08:30
最近碰到一个有趣的开源项目: JApiDocs 地址: https://gitee.com/yeguozhong/JApiDocs 1、介绍 JApiDocs 是一个符合 Java 编程习惯的 Api 文档生成工具。最大程度地利用 Java 的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs 会帮你导出一份漂亮的 Html 文档,并生成相关的 Java 和 Object-C 相关数据模型代码,从此,Android 和 IOS 的同学可以少敲很多代码了,你也不需要费力维护接口文档的变化,只需要维护好你的代码就可以了。 实际使用中,你的原先代码,可能如下: /** * Get User List * @param listForm */ @RequestMapping(path = "list", method = {RequestMethod.GET, RequestMethod.POST} ) public ApiResult<PageResult<UserVO>> list(UserListForm listForm){ return null; } 此时,你的代码不用改动 (仅仅需要引入依赖jar,和简单的配置),不用像swagger一样额外通过注解的形式,来给该接口添加说明,该 JApiDocs 会自行给该接口添加接口说明和字段说明。 换言之,该

网络分析工具NetQuiet

给你一囗甜甜゛ 提交于 2020-08-10 18:53:57
源码路径: svn://gitee.com/yuewguo/NetQuiet 1、支持windows和linux 2、生成的监控日志保存在当前目录下的 NQ.log 中,格式如下: 分割符为逗号。 举例:7,3,0.0.0.0,0,192.168.0.107,0,,0.0.0.0,2020-04-28 22:22:16 第一列 日志编号,排序 第二列 日志类型,取值如下: 0 保留 1 本机IP地址 2 本机开放的服务 3 远端IP地址 4 远端开放的服务 5 DNS服务器 6 DNS请求 7 域名信息 8 TCP连接 第三列 本地IP地址 第四列 本地服务端口 第五列 远端IP地址 第六列 远端服务端口 第七列 域名 第八列 域名IP 第九列 记录时间 来源: oschina 链接: https://my.oschina.net/u/1244235/blog/4293034

Typora安装PicGo图床

血红的双手。 提交于 2020-08-10 17:52:38
结合Typora、PicGo(图床)、码云(图片存储点),使Typora自动上传图片。 涉及对象 码云 Typora PicGo 版本要求 Typora 0.9.84 及以上 PicGo 2.2.0 及以上 步骤 码云创建公共私有仓库,生成私有令牌。 安装PicGo、安装Typora。 注意版本要求 ,版本低可能相关功能选项不存在。 找到PicGo插件设置,下载gitee-uploader 1.1.2 。注意需要提前安装node.js。 找到PicGo图床设置,创建gitee连接参数。 找到Typora偏好设置,图像功能选项的上传服务,选择下拉框 PicGo(app) 。 注意只有在中文语言界面环境下才显示 验证图片上传选项,验证成功即可。 安装错误问题 验证图片上传服务时,抛出错误 faild to fetch 。原因是未打开PicGo的Server服务。版本2.2.0以上才有该功能。 来源: oschina 链接: https://my.oschina.net/ryanjiang/blog/4299954

Asp.net Core 3.1 Razor视图模版动态渲染PDF

独自空忆成欢 提交于 2020-08-10 17:43:04
Asp.net Core 3.1 Razor视图模版动态渲染PDF 前言 最近的线上项目受理回执接入了电子签章,老项目一直是html打印,但是接入的电子签章是仅仅对PDF电子签章,目前还没有Html电子签章或者其他格式文件的电子签章。首先我想到的是用一个js把前端的html转换PDF,再传回去服务器电子签章。但是这个样子就有一个bug,用户可以在浏览器删改html,这样电子签章的防删改功能就用不到,那么电子签章还有啥意义?所以PDF签章前还是不能给用户有接触的机会,不然用户就要偷偷干坏事了。于是这种背景下,本插件应运而生。我想到直接把Razor渲染成html,html再渲染成PDF。 该项目的优点在于,可以很轻松的把老旧项目的Razor转换成PDF文件,无需后台组装PDF,如果需要排版PDF,我们只需要修改CSS样式和Html代码即可做到。而且我们可以直接先写好Razor视图,做到动态半可视化设计,最后切换一下ActionResult。不必像以前需要在脑海里面设计PDF板式,并一次一次的重启启动调试去修改样式。 2.依赖项目 本插件 支持net45,net46,core的各个版本,(我目前仅仅使用net45和core 3.1.对于其他版本我还没实际应用,但是稍微调整都是支持的,那么简单来说就是支持net 45以上,现在演示的是使用Core3.1)。 依赖插件 Haukcode

JSP+Servlet+JDBC+mysql实现的个人日记本系统

老子叫甜甜 提交于 2020-08-10 17:34:39
项目简介 项目来源于: https://gitee.com/wishwzp/Diary 本系统基于 JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统。涉及技术少,易于理解,适合 JavaWeb初学者 学习使用。 难度等级:入门 技术栈 编辑器 Eclipse Version: 2019-12 (4.14.0) 前端技术 基础:html+css+JavaScript 框架: JQuery + BootStrap 后端技术 Jsp+Servlet 数据库:mysql 5.7.27(个人测试使用) jdk版本:1.8.0_181(个人测试使用) tomcat版本:8.5.34(个人测试使用) 本地运行 Eclipse环境准备 1. eclipse新增jdk 2. eclipse新增tomcat 导入项目 若有疑惑可查看 视频版本 。 1.下载zip直接解压或安装git后执行克隆命令 git clone https://gitee.com/wishwzp/Diary.git 2.使用eclipse导入项目,配置jdk、tomcat和所需jar包。 项目所依赖jar包在 WebContent/WEB-INF/lib 文件夹下。 3.打开Navicat For Mysql,运行 WebContent/mysql/db_diary.sql 。 4.修改