- 博客(43)
- 收藏
- 关注
原创 springBoot整合mongodb之聚合操作
1.导入工具地址2.配置环境变量在环境变量path添加对应bin路径3.导入数据文件4.导入命令5.导出命令。
2024-07-17 09:57:12
505
原创 mongodb在windows环境安装部署
MongoDB 采用了面向文档的数据模型,数据以 JSON 风格的 BSON(Binary JSON)文档存储,支持动态模式,使得数据在存储时不需要固定的表结构。完成安装后,勾选“Install MongoDB Compass”以安装 MongoDB Compass,这是一个 MongoDB 官方提供的图形管理工具,便于管理和浏览数据库。MongoDB 支持内存映射存储引擎,能够在内存中快速读写数据,同时支持水平扩展,通过分片(Sharding)实现数据水平划分和负载均衡,提高了系统的读写能力和响应速度。
2024-07-01 10:03:48
1140
原创 基于redis的分布式锁
用脚本的方式执行redisTemplate.execute会出现异常java.lang.UnsupportedOperationException: io.lettuce.core.output.ValueOutput does not support set(long),好像是返回值无法转换,由于redis版本不匹配,我这边redis版本是5.0.14.1;释放锁时需要确保只有持有锁的客户端才能释放锁,因此需要在释放锁时检查锁的值是否是当前客户端的标识。4.3通过value比对保证解的锁是自己持有的;
2024-06-12 13:36:25
629
原创 Java中调用接口
Feign 是一个在 Java 平台上的声明式、模板化的 HTTP 客户端,它简化了使用 HTTP API 的过程。指定一个回退类,当调用失败时,将调用回退类中的方法。指定要调用的目标服务的URL地址,可以是一个完整的URL地址,也可以是占位符形式的URL地址。指定要调用的目标服务的服务名。可以是一个单独的服务名,也可以是多个服务名组成的数组。指定要调用的目标服务的基本路径,可以是一个字符串,也可以是一个占位符形式的字符串。同value,指定要调用的目标服务的服务名。指定要调用的目标服务的URL地址。
2024-05-08 10:00:41
654
1
原创 Java单例模式
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点以访问该实例。这在需要控制某些资源(如数据库连接、线程池、缓存等)的访问时非常有用。
2024-04-18 14:07:59
400
原创 Java定时任务
java.util.Timer 类允许您在未来的某个时间执行一个任务,或者在一定的时间间隔执行任务。可以指定定时任务的触发时间、频率等。每天的0点、3点、5点、7点都执行一次:0 0 0, 3,5,7 * *?在12分、13分、14分执行一次:0 12,13,14 * * *?每月1号凌晨1点执行一次:0 0 1 1 *?每隔1分钟执行一次:0 */1 * * *?每隔5秒执行一次:*/5 * * * *?每天22点执行一次:0 0 22 * *?每天凌晨1点执行一次:0 0 1 * *?
2024-04-17 16:08:31
1660
原创 volatile
用来声明变量的关键字之一,它的主要作用是确保。在多线程编程中,如果一个变量被多个线程共享并且这些线程可能同时修改该变量的值,那么就需要使用 volatile 关键字来保证线程之间对该变量的操作是可见的、有序的。
2024-04-16 16:42:46
585
原创 函数式接口、Stream流
函数式接口中只能包含一个抽象方法。这个抽象方法可以有默认实现,也可以是继承自 Object 类的方法(如 equals()、toString()、hashCode()等),但是接口中只能有一个独立的抽象方法。: 函数式接口可以包含多个默认方法和静态方法,这些方法可以有方法体,可以在接口中提供默认实现,以便于接口的使用者直接调用。: 为了明确地表示一个接口是函数式接口,可以使用 @FunctionalInterface 注解进行标识。
2024-04-16 10:22:56
397
原创 Java中队列
队列是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。在 Java 中,队列通常是通过链表或数组实现的,不同的实现类在内部数据结构和操作上可能有所不同。
2024-04-11 15:39:58
1163
原创 JUC常用辅助类
3.等待所有线程到达屏障点: 当所有参与同步的线程都调用了await()方法后,它们会在屏障点处被阻塞,直到所有线程都到达屏障点。一旦所有线程都到达屏障点,CyclicBarrier将会执行可选的Runnable任务(如果提供了),然后释放所有被阻塞的线程继续执行后续操作。与CountDownLatch不同,CyclicBarrier可以被重用,因为它的计数器在达到零后会被重置为初始值,并且可以在构造函数中指定一个Runnable任务,当计数器达到零时,该任务会被执行。
2024-04-10 09:00:47
692
原创 集合类多线程(JUC)
是广义上的集合,简单理解就是容器。注意:集合只能存放对象类型的数据。指的是 java.util 包中定义的各种容器类、相关的工具类、接口的统称。不同的容器存储不同结构的数据。使用时要进行导包操作百度网盘获取JDKAPI文档,学习集合基础提取码:2ktk。
2024-04-09 16:20:12
1098
原创 JUC基础
总之,synchronized 关键字在Java中是用来实现线程安全的重要工具,它可以确保对共享资源的访问是同步的,从而避免了多线程环境下的竞态条件。在这种情况下,synchronized 关键字锁定了括号中指定的对象(这里是 this),确保只有一个线程可以同时执行被锁定的代码块。Lock,可重入锁,可以判断锁,非公平(可以自己设置);在这里,lockObject 是一个特定的对象,多个线程可以共享它,并使用它来同步对共享资源的访问。wait 释放锁,释放资源,sleep睡眠,不释放资源。
2024-04-08 16:58:40
807
原创 阿里云短信服务业务
点击头像,权限安全的AccessKey设置子用户AccessKey添加用户组和用户添加用户组记得绑定短信服务权限添加用户记得勾选openApi访问绑定用户组。
2024-04-01 08:42:12
440
原创 双亲委派机制
1.除了Bootstrap ClassLoader,所有的非Bootstrap ClassLoader都继承了java.lang.ClassLoader,由这个类的defineClass处理后续操作;由于双亲委派是JDK1.2之后引入的,手写的load代码会破坏双亲委派机制,但是位类需要适用于之前的代码,所以推荐使用findClass来补救双亲委派机制的弊端。2.越核心的类库越是被上层类加载器加载,限定过的名一旦被加载,被动情况下,就不允许重复加载,有效的避免混乱。
2024-03-29 08:30:25
327
原创 JAVA 中GC(垃圾处理器)
*注意:**主要作用域堆区域1.JVM在进行GC的时间,不是统一回收三个堆里面得子区域(新生区、幸存区(from to)、老年区);2.GC种类:轻GC和重GC(作用域可以看我前一篇。
2024-03-28 13:59:02
495
原创 Redis安装和使用
首先,你需要从 GitHub release 页面下载 Redis 的 Windows 版本。下载完成后,解压 Redis 压缩包到你想要安装的目录,比如 C:\Redis。在 Redis 目录中,你可以找到一个 redis.windows.conf 文件,这是 Redis 的配置文件。你可以根据需要对其进行编辑,一般来说,默认的配置已经足够了。你可以指定端口号、持久化方式等参数。
2024-03-26 11:14:19
800
原创 Java给插入数据设置ID
数据库中的自增ID是指在插入新记录时,数据库系统会自动为该记录生成一个唯一的标识符,并且这个标识符会按照一定规则(通常是递增)进行自动生成。这个自动生成的唯一标识符通常用作表的主键,以确保每条记录都有一个唯一的标识。
2024-03-26 09:01:19
908
原创 rabbitmq五种消息模型和消息持久化
当你运行许多消费者时,任务将在他们之间共享,但是一个消息只能被一个消费者获取。Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。在Direct模型下,队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)在某些场景下,我们希望不同的消息被不同的队列消费。消息的发送方在向Exchange发送消息时,也必须指定消息的routing key。 5、生产者发送的消息,经过交换机到达队列,实现一个消息被多个消费者获取的目的。
2024-03-22 10:30:22
1010
1
原创 RabbitMQ死信队列和延迟队列
1)“死信”是RabbitMQ中的一种消息机制。2)消息变成死信,可能是由于以下的原因:- 消息被拒绝- 消息过期- 队列达到最大长度3)死信队列当消息在一个队列中变成死信(dead message)之后,它能被重新发送到另一个交换机中,这个交换机就是 DLX(Dead-Letter-Exchange ) ,绑定 DLX 的队列就称之为死信队列。
2024-03-22 09:05:26
1047
1
原创 rabbitmq安装、Java连接
下载可用于Windows的RabbitMQ安装程序,选择和你Erlang相匹配的版本,我的mq版本为RabbitMQ 3.12.0,并根据提示完成安装,安装过程中,RabbitMQ和Erlang的版本要对应,安装完成后,在开始菜单查看是否有RabbitMQ图标,如果有则说明安装成功。2.配置Erlang环境。首先需要下载并安装Erlang,RabbitMQ是用Erlang编写的,因此需要安装Erlang才能运行RabbitMQ,访问Erlang官网。下载RabbitMQ安装程序,访问RabbitMQ官网。
2024-03-20 15:24:59
1301
1
原创 java发送邮件
1.通过FileUtils里面得pathToString对于文件转为string。3.通过创建好的Email ,调用方法进行分发。2.替换已做好标记的文字。
2024-03-19 14:54:32
153
原创 java针对excel文件导入导出
对于DeviceDto内部需要添加注解,@ExcelProperty(value = “序号”) value 就是你表格列名称。2.采用EasyExcel对于文件进行读取。1.遍历实例内部数据。
2024-03-15 11:12:25
251
1
原创 Java本地文件移动
三、采用java.nio.file中的Files中的remove方法,不需要删除,但是源文件不能。二、采用java.nio.file中的Files中的copy方法,有两份文件需要删除。一、采用流来处理文件的移动,这样会导致有两份文件需要删除。以上就是我目前知道的三种方式,不足之处,还望勿怪;处于使用状态,不然或出现异常;
2024-03-08 15:22:49
429
1
原创 多线程基础、多线程子线程结束,执行主线程
在main函数中创建这个自定义线程类的对象,然后将其传递给FutureTask类的构造函数,创建FutureTask对象,最后使用FutureTask对象作为Thread对象的target来创建并启动新线程,并通过Future对象的get方法来获得子线程执行结束后的返回值。在main函数中创建这个自定义线程类的对象,然后将其传递给Thread类的构造函数,创建Thread对象,最后调用start方法启动线程。自定义一个类,继承Thread类,并重写run方法,该run方法包含线程要执行的任务。
2024-03-07 14:52:08
405
原创 Java微服务全局捕获异常
1.@RestControllerAdvice注解用于创建全局异常处理类,用于捕获和处理整个应用程序中的异常。1.@RestControllerAdvice是一个组合注解,由@ControllerAdvice和@ResponseBody注解的组合,主要作用就是捕获系统出现的未处理的异常;2.只需要在对应的类上加载注解@RestControllerAdvice,内部包含@ExceptionHandler这个注解方法,来处理遇到不同的异常;
2024-02-29 10:15:31
195
原创 java针对不能放行接口,多线程认证失败的解决方法
2.我们需要回去调用方的授权码,放置到我们的请求头里面(授权令牌都有时间限制,会出现失效情况);但是针对定时任务我们没有授权,那样我i们就可以调用授权模块产生一个令牌,塞到本地线程,之后获取令牌放到指定请求头内;3.当我们调用feign是多线程,那我们的授权也会随着第一次结束,线程认证失败,需要我们针对每个线程都防止一个认证令牌;在单应用是不会出现调用接口401未认证;设计微服务之间模块的调用我们就需要处理授权问题,;1.我们可以采用认证模块放行对应数据;
2024-02-27 14:04:58
224
原创 Java中for 增强for forEach 迭代器的相同以及区别
4.迭代器–它可以在不需要知道元素和集合的类型的情况下,随时修改或者删除集合内部的元素,当你需要对不同的容器实现同样的遍历方式时,迭代器是最好的选择。3.forEach --需要知道数组或集合内部对象的数据类型,也无法删除内部对象,可修改对象,虽然应用范围广,但是速度较慢,一般不建议使用;2.增强for–需要知道数组或集合内部对象的类型,也无法删除内部对象,修改对象需要外部定义坐标;4>迭代器:可以直接删除、修改内部元素,不同集合类型实现相同方式遍历,可以直接使用迭代器;一、四种循环的用法,以及局限性;
2023-11-14 09:26:59
175
原创 java拷贝对象属性
三、我们可以采用BeanUtils里面copyProperties这个方法来拷贝(这个是浅拷贝需要get/set方法支持);一般支持这个方法,较为简单并且只要属性相同就可以复制过去,但是也要注意第一个值会覆盖第二个所有值;五、如果我们是同一个对象类型进行数值之间的copy,可以重写对象里面的copy方法;主要问题(代码冗余太多,无法保证你需要属性得到对应的属性值);一、通过方法的属性的getters和setters;四、我们可以通过反射来获取对应属性值之后再复制;
2023-11-02 10:04:27
76
原创 输入数据库连接参数连接数据库
由于我们把连接放到try块内,当try内部调用结束就会释放连接;如果你没有放到try块内,需要按照下面的写释放连接资源。由于工厂build需要一些特定参数(Configuration、流文件)一、通过参数获取一个数据源(DataSource)三、对应工厂获取连接加载对应mapper。二、通过数据源获取一个数据库连接工厂。
2023-11-01 08:59:12
73
1
原创 springboot多数据库连接处理
二、我们需要在application.properties或application.yml文件中配置多个数据源。如果我们想自己选择数据源不写死可以再service掉用mapper之前动态加载对应数据源。三、创建一个配置类,配置不同的数据源。一、首先我们需要引入相应的JAR包。下述是properties配置。五、对应mapper的接口编写。四、创建数据源Bean。
2023-10-31 09:37:50
143
1
原创 熔断机制Hystrix
我们改造consumer,当目标服务的调用出现故障,我们希望快速失败,给用户一个友好提示。服务支持的线程和并发数量有限,请求一直处于阻塞状态,会导致服务器上的资源耗尽,其他服务被打死;微服务中服务之间调用关系错综很复杂,可能一个功能需要多个服务里面的功能协调完成,会形成一个复杂的链路;Half Open:半开状态,open状态不是永久的,打开后会进入休眠时间(默认是5S)。此时会释放部分请求通过,若这些请求都是健康的,则会完全关闭断路器,当我们输入ID=1代码结果依旧是服务请求失败,进行降级处理;
2023-04-04 15:11:46
187
原创 open feign 远程服务调用
1、我们在微服务之间接口的相互之间调用;降低代码的冗余,主要是集成了负载均衡,主要是以接口的方式发送Http请求。2.定义一个接口,在接口上面添加@FeignClient注解,在注解的后面主要是指定我们的服务名称,之后通过里面的接口路径找到对应的服务,进行远程调用;3.在远程调用的服务里面的启动类上面添加@EnableFeignClients注解,之后spring加载@FeignClient就能找到对应的服务;基础使用就到这里,接下来,将为大家介绍一下用到熔断监测、降级和恢复机制 Hystrix。
2023-03-25 14:54:34
544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人