- 博客(443)
- 资源 (24)
- 论坛 (2)
- 收藏
- 关注
原创 RocketMQ入门教程(四):事务消息
GenericMessage message = new GenericMessage("tx msg body");rocketMQTemplate.sendMessageInTransaction("tx-topic", message, "tx");@Component@RocketMQTransactionListenerpublic class LocalTransactionListener implements RocketMQLocalTransactionListener {.
2021-01-24 16:11:10
13
原创 SpringBoot入门教程:Twitter雪花算法(IDWorker)
雪花算法常用于数据库主键id的值(防止将来分库分表时使用数据库id自增造成id重复),或者订单号等。/** * Twitter 雪花Snowflake算法 */public class IDWorker { /** * 起始的时间戳 */ private final static long START_STMP = 1480166465631L; /** * 每一部分占用的位数 */ private final static
2021-01-24 13:50:33
18
原创 Spring Cloud Alibaba快速入门(六):分布式事务 - Seata
一:分布式事务解决方案1.1 方案1:全局事务(二阶段提交 2PC)全局事务会将每个本地事务纳入到一个全局事务管理器(协调者)中,每个本地事务都会执行并将事务的执行结果汇报给全局事务,注意现在本地事务还没有真正的提交,等到所有本地事务都执行成功了,全局事务会所有本地事务进行提交。全局事务管理器负责协调每个本地事务,然后最后统一决策是对所有本地事务进行提交还是回滚。全局事务是事务分为两个阶段,第一阶段为表决阶段,第二阶段为提交阶段,如果表决阶段都通过即所有本地事务都执行成功,但是在第二阶段去真正提交每
2021-01-14 18:02:12
51
原创 RocketMQ入门教程(三):发送消息和消费消息
一:普通消息RocketMQ提供了三种方式来发送普通消息:可靠同步发送、可靠异步发送、单向发送。1.1 可靠同步发送同步发送是发送消息后必须等待RocketMQ服务返回发送的结果,这里会一直同步阻塞,直到拿到RocketMQ服务返回发送的结果才继续往下执行代码。同步发送一般应用于对发送成功可靠性要求很严格的场景,一般是要保证100%发送成功,不成功就重试。@RestControllerpublic class RocketMQController { @Autowired pr
2021-01-10 14:32:54
42
原创 RocketMQ入门教程(二):SpringBoot集成RocketMQ
1. pom.xml<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.8.0</version></dependency>2. applicaton.ymlserver: port: 8888rocketmq:
2021-01-07 10:30:16
51
原创 RocketMQ入门教程(一):简介与安装
一:消息中间件的应用场景1.1 异步解耦一般一个系统中有很多个微服务,当用户在下单系统中下单时,下单操作完成后还会调用库存系统进行扣减库存,还会调用积分系统增加用户的积分,还会调用优惠券系统进行发放优惠券等等一系列的操作,如果在下单系统中同步调用库存系统、同步调用积分系统、同步调用优惠券系统势必会导致整个下单时间会比较长,不利于用户体验,假如在同步调用的过程中某个微服务出现问题就会导致整个下单失败。为了减少调用其它微服务时间,为了减少其它微服务出现问题而导致下单不可用,我们可以将所有的同步调用方式改为
2021-01-06 16:39:47
70
原创 Spring Cloud Alibaba快速入门(五):RPC - Dubbo
一:简介Spring Cloud微服务之间互相调用一般是通过Feign以HTTP短连接的方式来调用,因为是HTTP短连接所以每次调用都需要建立TCP连接,使得效率相对Dubbo比较低。Dubbo是一个高性能RPC框架,常用于代替Feign在微服务之间调用。一般我们对外提供服务使用REST API,内部服务之间调用使用RPC。二:启动Nacossh startup.sh -m standalone三:Spring Cloud集成Dubbo(服务提供方)3.1 pom.xml注意:这里并没有使用
2021-01-05 20:32:30
38
原创 Spring Cloud Alibaba快速入门(三):熔断降级 - Sentinel
GitHub https://github.com/alibaba/Sentinel/releasesjava -jar -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jarlocalhost:8080 用户名:sentinel 密码:sentinelpom.xml<?xml ve
2021-01-02 19:20:49
58
原创 Spring Cloud Alibaba快速入门(二):配置中心 - Nacos
一:简介https://nacos.io/zh-cn/docs/quick-start.html 支持以HTTP方式来管理配置,支持动态刷新配置。下载解压即可:https://github.com/alibaba/nacos/releases# 单击模式启动sh startup.sh -m standaloneWeb UI:localhost:8848/nacos 用户名: nacos 密码: nacos二:nacos 持久化2.1 建库建表nacos的数据默认是保存在nacos内嵌的
2020-12-30 21:59:24
41
原创 Spring Cloud Alibaba快速入门(一):注册中心 - Nacos
一:微服务集成Nacos 服务发现1.1 pom.xml引入nacos-discovery<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.3.RELEASE</version>&
2020-12-30 17:44:49
42
原创 Spring Cloud快速入门(九):路由网关 - Gateway
路由:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency> <groupId>org.springframework.cloud</
2020-12-29 20:39:58
42
原创 Spring Cloud快速入门(八):链路追踪 - Sleuth
日志持久化到MySQL:创建Zipkin需要的数据库和表结构。/*SQLyog Ultimate v11.33 (64 bit)MySQL - 5.5.58 : Database - zipkin**********************************************************************//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNI
2020-12-29 10:43:59
48
1
原创 Spring Cloud快速入门(七):路由网关 - Zuul(二)
一:简介一般一个系统中会有多个微服务,而微服务之间又会相互调用,通常所有的微服务都会通过路由网关进行转发。路由网关(Zuul) --> 订单微服务 --> 商品微服务,假如商品服务出现业务逻辑或者运行时异常时如何在路由网关中获取商品服务抛出的异常,并统一返回json格式呢?这就是这篇文章要解决的问题。{ "code": "1000", "msg": "参数错误"}二:platform-basepublic enum ApiErrorCodeEnum { SUCCESS("
2020-12-28 20:33:05
44
原创 Spring Cloud快速入门(六):路由网关 - Zuul
API网关:聚合多个微服务,对外提供一个统一的路径。一般一个系统中会有很多微服务,如果前端调用就需要维护多个ip:port, 这样比较麻烦。一般微服务都会有一些共同的代码比如身份认证校验token等也需要抽取出来。zuul是netflix公司提供的,可以和feign、ribbon、hystrix可以无缝整合。pom.xml<dependency> <groupId>org.springframework.cloud</groupId> <artif
2020-12-28 18:15:18
34
原创 Spring Cloud快速入门(五):熔断降级 - Hystrix
服务雪崩:一个接口可能会调用多个其它接口,而其它接口可能还会再调用其它接口,当中间某个接口处问题时就会导致整个接口不能提供服务。熔断降级:熔断器就是一个保险丝。<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.11.RELEA
2020-12-28 15:40:35
53
原创 Spring Cloud快速入门(四):服务调用 - Feign
Ribbon调用微服务的不好的地方需要在代码中拼接接口的完整的路径,感觉不够优雅,拼接也容易出错。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>@EnableFeignClients@EnableFeignClien
2020-12-27 19:05:04
35
原创 Spring Cloud快速入门(三):负载均衡 - Ribbon
Ribbon已经集成到Spring Cloud中了,所以不需要在额外引入依赖。服务调用:不需要在手动拼接服务地址负载均衡服务调用示例@Bean@LoadBalancedpublic RestTemplate restTemplate() { return new RestTemplate();}@RestController@RequestMapping("/shoppingCart")public class ShoppingCartController { @
2020-12-26 22:46:48
44
原创 Spring Cloud快速入门(二):配置中心 - Config
配置文件集中统一管理:配置文件不需要每个微幅单独维护,而是放在外部统一维护对每个微服务的配置区分环境(开发环境、测试环境、灰度环境、生成环境)无需重启服务,动态的调整配置参数在GitHub上创建一个仓库,保存每个微服务每个环境的配置文件:配置文件命名规范:服务名-环境, 如 order-web-dev.yml、order-web-pro.ymlconfig-server<dependency> <groupId>org.springframewo
2020-12-25 14:20:50
52
原创 Spring Cloud快速入门(一):注册中心 - Eureka
一:Eureka Serverpom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> <dependency> <groupId>org.springframework.clou
2020-12-24 21:32:13
45
原创 SpringBoot入门教程:@EnableXxx和自动装载
一:ImportSelector接口1.1 User@Data@NoArgsConstructor@AllArgsConstructorpublic class User { private Long id; private String username;}1.2 UserConfiguration注意:该类并没有使用spring的注解,没有使用@Configuration也没有使用@Component,spring扫描的时候并不会装载该类作为Bean。public c
2020-12-16 21:30:28
73
原创 SpringBoot入门教程:使用go-mysql-transfer将mysql同步到elasticsearch
一:安装GitHub: https://github.com/wj596/go-mysql-transfer1.1 linux、windows安装直接下载二进制文件.zip即可。1.2 Mac安装1.2.1 安装go并配置环境变量Mac没有二进制文件,所以只能自己下载源码进行编译,go-mysql-transfer 是使用go语言开发的,所以需要先安装go语言https://studygolang.com/dl,然后配置环境变量。vi ~/.bash_profile# GO的安装目录e
2020-12-07 16:59:44
157
原创 SpringBoot入门教程:Spring Security 前后分离
Spring Security网络上很多前后端分离的示例很多都不是完全的前后分离,此篇文章要用最简单的示例实现出真正的前后端完全分离的权限校验实现。1. pom.xml主要依赖是spring-boot-starter-security和jwt。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</.
2020-11-13 16:59:58
170
原创 SpringBoot入门教程:MyBatis二级缓存
一:一级缓存和二级缓存简介①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。写这篇文章的初衷:MyBatis二级缓存在实际工作中一般都不会使用,但是
2020-11-10 13:43:11
135
原创 SpringBoot入门教程:RestTemplate
一:简介通常在Java代码中调用其它http 接口的话会使用HttpClient,不过这个使用起来有些繁琐,Spring中推出了一个简单的RestTemplate用来调用rest api,使用起来非常简单。二:基础示例@RestController@RequestMapping("/user")public class UserController { @PostMapping("/regist") public User regist(@RequestBody CreateUs
2020-11-09 15:40:46
116
原创 SpringBoot入门教程:Redis四大缓存问题(击穿、穿透、雪崩、数据一致性)
一:穿透假如我们的id都是数据库自增,大于0的值,如果使用 http://localhost:8080/users/-1 访问以下接口就会出现在缓存中查不到,在数据库中也查不到的现象,这种现象就叫做缓存穿透。@Slf4j@RestController@RequestMapping("/users")public class UserController { @Autowired private RedissonClient redissonClient; @Autowi
2020-11-09 10:58:01
162
原创 SpringBoot入门教程:MapStruct
开发中我们可能使用通用Mapper或者MyBatis-Plus去查询数据,而这类框架都是返回的实体,实体是和数据库中的表一一对应的,而作为接口的返回值我们无需把整个实体都暴露给前端,这就需要将实体转为DTO了,通常有以下转换方式:自己写代码手动转换(这种方式代码量多,而且不优雅)BeanUtils.copyProperties(entity, dto),这种方式是通过反射来实现的,一般反射效率相对有点低使用ModelMapper框架(这种方式是通过反射来实现的,一般反射效率相对有点低)
2020-11-05 17:56:13
146
原创 SpringBoot入门教程:AOP
1. 需要在Application中开启AOP@EnableAspectJAutoProxy(exposeProxy = true)2. 引入aop依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>3. @Aspect
2020-11-01 12:21:15
153
1
原创 SpringBoot入门教程:JSON
一:JacksonJackson 是SpringBoot的JSON默认框架。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> <version>2.3.4.RELEASE</version></dependency>在序列化的时可
2020-10-31 22:05:51
94
原创 SpringBoot入门教程:Redisson分布式锁
一:简介Redis是一个单线程的内存服务器。Redisson是redis的一个Java客户端,为使用者提供了一系列具有分布式特性的常用工具类,使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度,同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作,Redisson底层采用的是Netty 框架。Redisson比Jedis功能更加强大。Redisson是我国的一位大牛写的一个框架,可以使用 redis做类似J
2020-10-31 15:48:41
174
原创 SpringBoot入门教程:在IDEA中使用远程调试Remote
需求:很多时候本地的程序是正常的,但是测试环境是有问题的,此时我们可以通过增加很多日志输出来确定具体的问题,这种方式需要添加完日志还要重启服务而且只能看日志输出的内容,其它变量值还是不知道,我们可以借助IDEA提供的Remote在本地来远程调服务器代码。本地远程调试就像在本地启动服务连的测试环境的效果一样。一:准备测试项目二:启动测试环境项目SpringBoot 项目在启动时需要指定远程调试的参数,其中最重要是address表示端口号。java -Xdebug -Xrunjdwp:transp.
2020-10-20 17:58:40
159
原创 SpringBoot入门教程:Redis分布式事务
# setnx(SET if Not eXists)当key不存在时,设置指定的值,成功返回1,失败,返回0 setnx key value# EX: 过期时间,秒seconds,PX:过期时间,毫秒milliseconds# NX:Not eXistsset key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]常用的分布式锁一般是基于Redis的分布式锁或者基于ZooKeeper的分布式锁。分布式锁需要满足4个条件:互斥性:在
2020-10-15 22:24:15
165
1
原创 七:MyBatis-Plus 插件
ActiveRecord(简称AR)一直广受动态语言(PHP、Ruby等)的喜爱,而Java作为准静态语言,对于ActiveRecord往往只能感叹其优雅,所以我们也在AR道路上进行了一定的探索.Active Record主要要求不仅仅是实体要完成与表中的字段对应,还要自己能完成CRUD操作,负责把自己持久化。Active Record是一种领域模型Domain Model, 封装了部分业务逻辑。大概意思是实体自己能够完成持久化工作(即把dao层和entity层合并一起),也可以有部分逻辑(即有点像s
2020-10-09 21:50:37
160
原创 六:MyBatis-Plus代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId>
2020-10-09 21:33:14
101
原创 二:Mybatis-Plus 快速入门
一:建库、建表CREATE DATABASE mybatisplus DEFAULT CHARACTER SET utf8;CREATE TABLE `tbl_user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(255) DEFAULT NULL COMMENT '用户名', `password` varchar(255) DEFAULT NULL COMMEN
2020-10-09 16:29:54
145
原创 五:MyBatis-Plus的Service封装
通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,Save// 插入一条记录(选择字段,策略插入)boolean save(T entity);// 插入(批量)boolean saveBatch(Collection<T> entityList);// 插入(批量)boolean saveBatch(Collection<
2020-10-07 22:16:46
310
1
原创 四:MyBatis-Plus 条件构造器
在写SQL where条件的时候我们经常使用 =、!=、>、>=、 <、<=、in、like、between and、not、is null 等来构造条件,在MyBatis-Plus中也可以通过方法来构造这些where条件。AbstractWrapperQueryWrapper(LambdaQueryWrapper)UpdateWrapper(LambdaUpdateWrapper)条件构造器对象// 构造select、delete语句where条件QueryWrap
2020-10-07 22:08:00
373
1
原创 七:MyBatis-Plus 其它
SQL注入原理在MP中,ISqlInjector接口负责SQL的注入工作,AbstractSqlInjector是它的实现类,主要是由inspectInject()方法进行注入的,方法又调用injecttMappedStatement()方法,进而进入某个具体的方法类(如SelectById)来组装SQLselectById(1L) ->com.baomidou.mybatisplus.core.injector.ISqlInjectorcom.baomidou.mybatisplus.co
2020-10-07 22:07:34
112
原创 一:MyBatis-Plus 简介
MyBatis 的劣势即使非常简单的单表SQL语句还要在xml中写sqlMyBatis自身功能不够丰富,例如没有自带分页插件MyBatis-Plus 简介https://mybatis.plus/https://github.com/baomidou/mybatis-plusGitHub中非常活跃,腾讯都在使用,并非炒作而是实至名归。public interface BaseMapper<T> extends Mapper<T> { /** *
2020-10-06 22:18:18
171
2
原创 三:Mybatis-Plus通用CRUD
一:Create@SpringBootTestclass SpringbootMybatisplusApplicationTests { @Autowired private UserMapper userMapper; @Test public void testInsert() { User user = new User(); user.setUsername("gaozhanlong"); user.setPa
2020-10-04 22:00:49
112
原创 SpringBoot入门教程:集成Redis集群
Redis 集群模式配置1. pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version></dependency><dependency>
2020-09-06 18:54:15
205
hadoop lib/native
2019-03-05
springboot-fastdfs.zip
2020-08-29
vbirdbest的留言板
发表于 2020-01-02 最后回复 2020-05-18
博客专栏和个人分类默认只显式5个,为什么不能配置显示个数
发表于 2018-09-11 最后回复 2018-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝