- 博客(41)
- 收藏
- 关注
原创 编写junit测试类 import org.junit.Test;
目录下,并且与主应用代码在同一包或子包中。例如,如果你有一个名为。测试方法命名: testMethod。的服务类,你可以创建一个名为。
2025-04-08 11:04:35
381
原创 Redisson分布式锁实现
如果持有锁的线程执行业务时间非常久,超过了过期时间,这样久有问题了,所以redisson还为我们提供了自动延时的功能。当线程加锁成功后,会异步起一个线程延长锁时间。
2024-05-16 17:38:06
285
原创 Mysql5.7 以上的JSON类型查询 8.0以上可加索引
sql例子:`name` varchar(255) NOT NULL COMMENT '姓名',`address` json NOT NULL COMMENT '住址',INSERT INTO `users` VALUES (1, '张三', '{\"city\": \"石家庄市\", \"tags\": [\"家\", \"公司\"], \"district\": \"桥西区\", \"province\": \"河北省\"}');
2024-04-01 15:45:03
878
原创 自定义 入参(非空)以及入参数据范围 校验工具类
****/@Data@NotNull(message = "申请部门id不能为空", groups = {AddGroup.class})@ApiModelProperty("申请部门id")@NotNull(message = "产品集合不能为空", groups = {AddGroup.class})@ApiModelProperty("产品集合")@Data@ApiModel("登记产品")
2024-02-26 15:32:01
440
原创 微信V3小程序支付&本地测试回调方法(NATAPP内网穿透)
支付成功后的服务器回调url(后台随便的一个接口能接收到就行) wxpay.notifyUrl=http://6dnnar.natappfree.cc/weiXinPay/callBack。访问 http://6dnnar.natappfree.cc/index.jsp。# 支付成功后的服务器回调url(后台随便的一个接口能接收到就行)# 微信支付商户号 服务商模式下为服务商的mchid 必填。#微信支付的商户密钥(开发者在微信商户平台查询)官网:https://natapp.cn。
2023-12-28 17:53:20
4560
2
原创 centos6.8 安装nginx
然后在浏览器里直接访问localhost,或者访问你的服务器ip。就可以看到nginx的欢迎页了。,查看nginx的安装目录,可以看到路径是nginx: /usr/local/nginx。iptables -F(不然无法远程访问)这样就把nginx启动起来了。关闭nginx,执行命令。重启nginx,执行命令。
2023-12-11 22:41:01
1162
原创 Mongodb 整合 SpringBoot -02
也可以使用uri连接 集群就是用uri来配置。# 默认端口是27017。索引可以大大提升查询效率,一般在查询字段上添加索引,索引的添加可以通过。复合索引的声明,建复合索引可以有效地提高多字段的查询效率。就可以了,没必要查询出所有字段修改后再更新所有字段。声明该字段需要索引,建索引可以大大的提高查询效率。)启动项目,看是否能正常启动,控制台没有错误。快速插入一条测试数据,数据的内容是对。的持久层框架,封装了底层的。
2023-12-11 22:34:05
112
原创 MongoDB——01
语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非。索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档。那么,通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
2023-12-11 22:06:59
99
原创 深入单例模式
单例模式可以牵扯到很多东西,比如 多线程是否安全,是否懒加载,性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式?饿汉式正常的饿汉式单例。
2023-09-29 00:44:13
195
原创 JUC-04 (四大函数式,链式编程,流式计算,lambda表达式,异步回调)
要使用Future,通常只需要将耗时的操作封装在一个Callable对象中,再将它提交给。为了让程序更加高效,让CPU最大效率的工作,我们会采用异步编程。首先想到的是开启一个新的线程去做某项工作。再进一步,为了让新线程可以返回一个值,告诉主线程事情做完了,于是乎Future粉墨登场。然而Future提供的方式是主线程主动问询新线程,要是有个回调函数就爽了。所以,为了满足Future的某些遗憾,强大的随着Java8一起来了。
2023-09-29 00:20:29
150
原创 JUC-03 (多线程下集合类不安全)
同时要求相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源内容时,系统才会真正复制一份专用副本(private copy。的时候,因为采用的是头插法,所以会可能会有循环链表产生,导致数据有问题,在 1.8 版本已修复,改为了尾插法;)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。,保证同步,但是每个方法执行的时候都要去获得锁,性能就会大大下降,而CopyOnWriteArrayList。,可能会有数据覆盖的情况发生,导致线程不安全。
2023-09-28 23:28:29
253
原创 JUC-02 (线程池)
阻塞队列是一个队列,在数据结构中起的作用如下图:当队列是空的,从队列中获取元素的操作将会被阻塞。当队列是满的,从队列中添加元素的操作将会被阻塞。试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素。试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增。在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤起。为什么需要?
2023-09-27 10:25:22
260
原创 JUC-01(多线程)
所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的。假如线程甲和线程乙在交替执行,某个时间点线程甲做出了礼让,所以在这个时间点线程乙拥有了CPU资源,执行业务逻辑,但不代表线程甲一直暂停执行。其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。
2023-09-26 23:19:24
94
原创 synchronized 8锁的现象
new this 具体的一个手机static class 唯一的一个模板如果锁的对象是同一个,那么一个方法执行前需要等待另一个方法释放锁,如果锁的对象不是同一个,那么两个方法执行不需要等待彼此释放锁。当synchronized修饰实例方法,锁的对象是方法的实例。这种情况下创建出了一个实例,锁的是一个实例,用这个对象调用两个同步实例方法,它们共用的是一把锁。创建出两个实例,锁的对象是两个实例,分别调用两个同步方法,它们用的是两个不同的锁。当修饰静态方法,锁的对象是当前类。
2023-09-25 00:32:02
63
原创 分布式缓存 redis集群
简述全量同步和增量同步区别?全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave什么时候执行全量同步?slave节点第一次连接master节点时slave节点断开时间太久,repl_baklog中的offset已经被覆盖时什么时候执行增量同步?
2023-07-16 18:49:58
166
原创 分布式事务 seata
TCC模式的每个阶段是做什么的?Try:资源检查和预留Confirm:业务执行和提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源,性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致需要考虑Confirm和Cancel的失败情况,做好幂等处理。
2023-07-15 15:06:22
265
原创 微服务保护 Sentinel
Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址丰富的应用场景例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。
2023-07-06 23:30:00
1732
原创 分布式搜索引擎(elasticsearch) 3/3章
elasticsearch中分词器(analyzer)的组成包含三部分character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smarttokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等。
2023-06-10 14:55:55
847
原创 分布式搜索引擎(elasticsearch) 2/3章
查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如::查一个字段:同时查询多个字段精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:ids:id集合查询range:范围查询term:精确查询地理(geo)查询:根据经纬度查询。例如::查询到指定中心点小于某个距离值的所有文档。
2023-06-04 00:23:39
502
原创 分布式搜索引擎(elasticsearch) 1/3章
1 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。2 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。
2023-05-27 01:05:54
368
原创 Docker快速入门
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。镜像是分层结构,每一层称为一个Layer1 BaseImage层:包含基本的系统函数库、环境变量、文件系统2 Entrypoint:入口,是镜像中应用启动的命令3 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置1 推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀2 镜像仓库推送前需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任。
2023-05-19 00:12:05
392
原创 统一网关Gateway 快速入门
例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的 像。请求进入网关会碰到三类过滤器:当前filter(路由的过滤器)、DefaultFilter(默认过滤器)、GlobalFilter(全局过滤器)域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com。
2023-05-16 00:25:09
163
原创 Nacos注册中心快速入门
1 修改order-service中的application.yml,设置集群为HZ,一个user-service:8081中的 application.yml,设置集群为HZ,另一个user-service:8082中的application.yml,设置集群 为SZ。项目启动->通过bootstrap.yml文件获取Nacos地址->读取Nacos中的配置文件->读取本地application.yml文件->创建spring容器->加载bean。
2023-05-12 01:20:39
332
原创 SpringCloud Eureka注册中心
原理就是通过拦截器拦截http请求 获取到请求服务名 再通过服务名获取所有注册且正常的服务请求ip+端口地址 然后再通过均衡策略(IRule接口)获得一个请求地址 然后再发送请求。2,配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则。1,代码方式:在order-service中的OrderApplication类中,定义一个新的IRule。Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
2023-05-11 23:45:36
92
原创 SpringCloud 利用 RestTemplate 或 Feign 发起http请求 请求服务提供者的接口
2,服务远程调用 RestTemplate3,RestTemplate常用方法:3.1 Get请求之getForObject。以JSON形式自动化转换responseType指定返回类型3.2 POST之postForObject3.3 exchange自定义请求方式Feign介绍: Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign1,引入依赖2,在服务启动类里添加注解开启Feign的功
2023-05-11 00:16:52
1319
原创 Mybatis-plus条件构造器和常用接口(MyBatisX插件)
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入mybatisx搜索并安装。1.可以快速通过Mapper定位到xml文件2.快速生成各种类3.快速生成CRUDMyBatisX插件用法地址。
2023-04-25 00:50:47
115
原创 mybatis-plus 常用注解和(乐观锁和悲观锁)
在实体类类型上添加@TableName("**_***"),标识实体类对应的表,即可成功执行SQL语句。3.更新时,version + 1,如果where语句中的version版本不对,则更新失败。MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认。水平分表相比垂直分表,会引入更多的复杂性,例如要求全局唯一的数据。③优点:可以随着数据的增加平滑地扩充新的表。若实体类和表中表示主键的不是id,而是其他字段,例如uid。万, 只需要增加新的表就可以了,原有的数据不需要动。
2023-04-24 00:04:42
1397
原创 SpringBoot2整合Swagger3
简介:Swagger是一款简单并且功能强大的API表达工具。我们可以通过Swagger生成的API得到接口的交互式文档。例如:没用swagger3之前,一般用postman来测试接口,并且出一份接口详细文档给到前端 这是很麻烦的事。但是现在Swagger3能帮我们很好的解决测试接口和接口文档这些事。Swagger作用:1将项目中所有的接口展现在页面上,这样后端程序员就不需要专门为前端使用者编写专门的接口文 档;2当接口更新之后,只需要修改代码中的 Swagger。
2023-04-12 01:43:55
999
原创 spring 常用注解
Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)@bean注解:用于告诉方法产生一个Bean对象,然后这个Bean对象交给Spring管理,Spring将会将这个Bean对象放在自己的IOC容器中注意点:SpringIOC容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建//使用@bean注解,表明这个bean交个spring 进行管理。
2023-04-03 23:31:47
190
原创 本地缓存 Guava Cache和Ehchach 的使用
想利用spring 的注解,不想手动shutdown ,因此web.xml 配置listener 监听,在销毁的时候进行shutdown,这里利用ehcache 的监听.需要加监听器 net.sf.ehcache.constructs.web.ShutdownListener.查询数据放入缓存,并且返回;如果缓存里有数据 就直接返回。if(cacheObj instanceof List){ 判断类型。-- ehcache 磁盘缓存 监控,持久化恢复 -->--guava依赖包-->
2023-03-31 23:54:16
238
原创 SpringBoot2.X整合定时任务和异步任务
(fixedRate有个坑,单线程的时候当任务执行时长超过设置的间隔时长时 后续任务会被阻塞 只有前一个任务执行完成后 后续任务就会立马执行 举个例子:(假如设置的fixedRate=3*1000,理论上 但是当第一个任务开始时 第三秒后就会调用第二次任务 但是第一个任务开始到结束用了7秒 ,所以开始第一个任务到结束 中途重新调用了两次任务 但第二个任务 和 第三个任务都被阻塞了 第二个和第三个任务就在排队 当第一个任务结束后 第二个任务就睡立马执行))使用场景:适用于处理log、发送邮件、短信……
2023-03-31 00:18:26
143
原创 Servlet3.0+SpringBoot2.X 注解Listener常用监听器
1. 定义一个类,实现 ServletContextListener 接口。常用监听器:应用启动监听器,会话监听器,请求监听器。2. 使用 @WebListener 进行配置。
2023-03-30 23:10:31
121
原创 Spring 面向切面编程 AOP
(*,Integer) 匹配了一个接受两个参数的方法,其中第一个参数是任意类型,第二个参数必须是Integer类型。Advice通知:在切入点中的函数执行的动作,如记录日志,权限校验等。匹配 service 包,子孙包下所有类的所有方法(识别)updateDemo(){} //修改demo。(*) 匹配了一个接受一个任何类型的参数的方法。findById(){} //查询demo。addDemo(){} //添加demo。delDemo(){} //删除demo。(..) 匹配一个接受任意数量参数的方法。
2023-03-29 23:55:31
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人