- 博客(167)
- 收藏
- 关注
原创 pgSQL中对json数组中的一个元素中的字段进行条件查询
我们通过jsonb_array_elements这个函数可以将参数中指定的json数组进行元素提取,把它们提取出来作为一个一维列表并可以对里面的每一个元素进行条件查询。例如上例:我想要查询表中所有记录下,对应上述jsonb类型的json字段中,list对应的列表下,field为1的记录。然鹅有些时候,如果我们需要对json数组中的一个元素中的字段进行条件查询,这个时候应该怎么办?pgSQL中的jsonb是用来存储json字段的一个数据类型。这个时候可以使用到jsonb提供的一个数组函数。
2024-10-30 23:31:55
908
原创 spring AOP中的PointCut:execution表达式详解
/表示匹配com.controller.UserController类或接口中所有的公有方法。//表示匹配com.savage.server包及其子包下的所有方法,4大权限修饰符。System.out.println("在执行之前做点什么");System.out.println("在执行之后做点什么");这里已经默认你创建好了你的对应 切面类以及切点和对应的通知方式。//controller包下以及子包下的任何的方法。//controller包下的任何的方法。//表示以 get开始的方法。
2024-10-30 23:31:23
587
原创 rabbitMq自定义converter进行序列化
然后创建对应的bean即可,因为springAMQP在对应的转换方法中已经写好了对应的实现,知识因为我们没有创建对应的bean才是用了默认的jdk自带的系列化工具,所以我们创建对应的自定义converter即可。首先引入对应Jackson依赖。* 自定义序列化转换器。
2024-10-30 23:30:41
366
1
原创 自定义异常注解处理框架
String message() default "list不能为空";String message() default "该字段不能为空";* <b>ValidateHelper
2024-09-28 16:50:42
1239
原创 PG数据库的Jsonb全文检索查询
- ->> 提取测试sql,将applyUserInfo下的nationality提取出来,做一维sql标准查询。"firstCompanyName": "中xxxxxxxxxxxx限公司","companyName": "中国xxxxxxxxxxx公司","hospitalName": "台xxxxxxxxxxxx院",-- 注意:键名需要用单引号括起来,并且值需要用双引号括起来。-- 使用 ->> 将键对应的值提取出来进行查询。-- 根据 jsonb 字段中的键值进行查询。
2024-09-28 16:49:40
1293
原创 jackson对于对象序列化的时候默认空值和手动传入的null的不同处理
Jackson 在序列化时不严格区分手动传入的null和默认空值,它只关心字段的值是null还是非null。但是,通过注解或配置,你可以灵活控制是否要在 JSON 中保留null值,确保在你需要的时候将字段序列化出来。在 Spring MVC 中,如果返回的对象中某些字段为null,默认情况下这些字段可能不会被序列化到 JSON 响应中,因此对方解析时看不到这些字段。这个行为主要由 Jackson(默认的 JSON 序列化框架)控制。Jackson 默认会忽略值为null的字段,以减少不必要的数据传输。
2024-09-28 16:46:56
1354
原创 多线程CompletableFuture
最近发现同事整理了一个不错的关于CompletableFuture的文档,在这里记录一下,方便以后工作备用。CompletableFuture还是不错的,支持同步或者异步的调用和等待返回结果(同步异步)future.thenAccept(result -> { // 异步等待获取结果。// 线程阻塞等待结果。return "开新线程异步执行";// 可以使用一个线程安全的list接收结果。return "开新线程异步执行";
2024-09-28 16:45:26
244
原创 jvm对于string常量过长的处理
javac编译器只在源代码编译阶段使用,一旦字节码生成并打包成JAR文件,运行时不再使用javac。因此,JAR文件运行时不会受javac的限制或影响。你所需注意的是在开发过程中确保代码能通过javac编译并正确生成字节码。只要在这阶段通过了,后续的打包和运行步骤中,javac不会再介入。
2024-08-23 20:17:42
882
原创 获取资源文件输入流(使用类加载器)
InputStream inputStream = cn.hutool.core.util.ClassLoaderUtil.getClassLoader().getResourceAsStream("model/outHospital.html");
2024-08-23 20:17:11
157
原创 pg数据库的三种不同数据持久性解读
在 PostgreSQL 数据库中,创建表时你可以选择不同的持久性(Persistence)选项。这些选项控制表在数据库中的存储方式及其对持久化数据的处理。PERSISTENTUNLOGGED和TEMPORARY。
2024-08-23 20:16:19
506
原创 通过sql修改pg数据库的表结构
4、删除一个表子段--使用drop(注意:在删除的时候同时会删除该字段的所有数据,需要提前按需备份)首先pg数据库是支持sql标准的,所以我们可以使用标准sql对pg进行操作。2、修改一个字段的名称--使用rename xx to xx。1、修改一个表的名称--使用rename to关键字。3、修改一个字段的类型--使用alter。5、在表中添加一个字段--使用add。
2024-08-23 20:15:45
540
原创 突发奇想:为什么外部类不可以是静态的
首先外部类的话在Java当中是一个顶层类的概念:它不附属于其他类,也不依赖于任何类的实例。它可以直接被实例化和使用,不涉及静态的概念。我们正常在Java中使用static关键字修饰的都是要依附于外部类,外部类的行为和生命周期独立于静态语义。
2024-08-23 20:15:11
376
原创 输出yyyy-MM-dd格式日期(使用Hutool-DateUtil)
/当前时间字符串:now = 2019-09-17 16:59:23。//当前时间:date2 = 2019-09-17 16:59:23。//当前时间:date3 = 2019-09-17 16:59:23。//当前时间:date = 2019-09-17 16:59:23。//常用偏移,结果:newDate2 = 2019-09-20 17:35:35。//常用偏移,结果:newDate3 = 2019-09-17 14:35:35。//一天的开始,结果:2019-09-17 00:00:00。
2024-08-23 20:14:07
761
原创 单线程环境下,用时间做为单一文件名称全局唯一处理
/如果消费成功改为1并删除。//value:0:没被消费,1:被消费。//全局唯一,用于控制文件时间全局唯一。
2024-08-23 20:13:17
331
原创 优雅的链式非空判断--Optional
Optional是jdk1.8引入的类型,Optional是一个容器对象,它包括了我们需要的对象,使用isPresent方法判断所包含对象是否为空,isPresent方法返回false则表示Optional包含对象为空,否则可以使用get()取出对象进行操作。public Person getPerson() { Person person = new Person(); if (null == person) { return null;
2024-07-31 00:10:59
693
原创 DelegateExecution和EXecution有啥区别
Execution 是一个具体的类,代表一个正在执行的流程实例或者子流程。• DelegateExecution 是一个接口,主要用于扩展点上进行业务逻辑操作,提供了丰富的方法来访问和操作流程实例。在大多数情况下,您将在编写自定义业务逻辑时使用 DelegateExecution,而不是直接使用 Execution。• Execution 是一个具体类,主要在引擎内部使用,负责流程实例的执行和控制。:一般不直接在业务逻辑中使用,而是在引擎内部进行流程实例的执行和控制。// 进行一些引擎内部处理。
2024-07-29 00:39:34
524
原创 EventBus事件总线
23:43:50.465 [main] ERROR com.example.activitydemo.test.EventBusSubscriber - 接收到了没有对应类型的消息DeadEvent{source=EventBus{default}, event=com.example.activitydemo.test.Test$Person@4fb61f4a}System.out.println("integer类型的订阅者收到的订阅消息 = " + integer);的服务与服务之间的通信。
2024-07-27 23:59:06
410
原创 springboot整合Activiti7流程引擎
以上就是springboot整合Activiti的一个简单的demo,在运行第一次之后,你的数据库应该会多出25张表,是Activiti用于运行所需要的。# full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。Activiti 使用到的表都是 ACT_ 开头的。由于Activiti在运行的时候是需要数据表的支持的,所以这里引入了mysql的依赖。# none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
2024-07-27 18:12:02
613
原创 springAMQP自定义direct交换机进行消息指定推送
在向交换机发布消息的时候,direct会根据附带的routingKey去找在绑定时候队列的BindingKey,如果二者匹配,则向queue推送消息。rabbitmq中,direct交换机会提供一个BindingKey,与之对应的是发布消息时候指定的routingKey。System.out.println("direct1接收到的msg:"+msg);System.out.println("direct2接收到的msg:"+msg);运行并查看控制台可以发现,消费者已经拿到了指定队列中的消息。
2024-07-14 23:42:59
383
原创 springAMQP自定义fanout交换机进行消息的广播
System.out.println("fanout1接收到的msg:"+msg);System.out.println("fanout2接收到的msg:"+msg);这里和直接发送到队列不同的是,此处的参数变为了交换机名字、routeKey、message。运行listener服务可以发现我们的队列已经可以拿到我们对交换机发送的消息。fanout1接收到的msg:fanout everyone。fanout2接收到的msg:fanout everyone。rabbitmq-web端。
2024-07-14 23:41:47
255
原创 rabbitmq解除消息者消息推送限制
prefetch: 1 //每次只能处理一个消息,处理完成才可以获取下一条消息。所以rabbitmq给我们提供了一个选项,在application配置当中可以做出如下配置。我们希望的是处理能力强的机器多承担消费消息的职能,而反之少承担消费消息的职能。但是我们在实际多机部署的情况下并不希望这样,并且这样可能会出现消息堆积。abbitmq默认情况下会将每一次消息依次轮训投递给绑定在队列上的。
2024-07-14 23:41:16
396
原创 Spring的事务传播机制(通俗易懂)
PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的默认设置。PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务,不影响之前的。PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
2024-07-13 00:09:17
754
原创 为什么文件需要校验MD5?
完整性验证:通过计算文件的MD5哈希值,可以生成一个唯一的标识符,也可以称为文件的“数字指纹”。通过比较校验前后的MD5值,可以验证文件的完整性,确保文件没有被意外篡改或损坏。文件识别与重复性检测:每个文件都有一个唯一的MD5码,不同文件的MD5码几乎不会相同。通过比较文件的MD5码,可以判断两个文件是否完全相同,避免存储和传输重复文件,节省存储空间和传输带宽。通过对传输或存储的数据进行MD5校验,可以确保数据在不同节点之间的一致性。通过校验MD5值,可以及时发现文件被篡改的情况,保护数据的安全性。
2024-07-13 00:08:50
363
原创 为什么@Service一定要写在实现类上面呢?
我们都知道加上了@service可以注册成为spring的bean对象,那么为什么一定要放在实现类呢?我放在接口行不行呢?而且对于Java中的多态来讲,注入一个接口的方式也可以为代码之间的解耦提供更多的操作空间与实现方式。这是一个新手都会好奇的问题,最近代码写的少,居然忘记了,赶紧捡起来复习一下。注解是标注在实现类上的,因为。进行实例化,也就是等同于。
2024-07-10 23:47:17
415
原创 SpringAMQP收发消息demo
首先我们需要创建一个微服务的架构,因为一般来讲这个都是在微服务架构下去使用的(当然单体也没什么不好,看qps)首先是消息的发送,使用RabbitTemplate作为消息的发送模版,方法convertAndSend。System.out.println("接收到的msg:"+msg);ok,至此完成springAMQP下对于rabbitmq的消息收发。然后我们可以创建listener包下的listener类(然后选择我们需要的子服务完成消息的首发。在父项目中我们需要引入amqp的依赖。
2024-07-10 00:30:46
818
原创 使用 @Valid 来验证参数
注解 @Valid 的主要作用是用于数据效验,可以在定义的实体中的属性上,添加不同的注解来完成不同的校验规则,而在接口类中的接收数据参数中添加 @valid 注解,这时你的实体将会开启一个校验的功能。@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格。下面是 @Valid 相关的注解,在实体类中不同的属性上添加不同的注解,就能实现不同数据的效验功能。
2024-07-08 16:21:15
716
原创 mq虚拟主机实现数据隔离
如果一个mq系统需要被多个实际业务系统共用,那么我们需要对于不同的业务系统分设不同的虚拟机进行数据隔离。本文将主要演示如何使用mq的web端进行创建不同虚拟机完成数据隔离。至此完成在web端端虚拟机数据隔离操作。
2024-07-07 15:04:04
206
原创 使用mq向队列发送消息流程
这里注意:1.交换机是转发消息用的,他并没有存储消息的能力,所以必须绑定交换机道队列的路由2.交换机默认是广播消息,即所有绑定到交换机的队列都会收到交换机转发的消息
2024-07-07 15:03:26
314
原创 127还是localhost....?
于是我经过各种百度之后怀疑会不会是127.0.0.1这个域名的问题,于是吧前端启动的服务端口由127.0.0.1改到localhost,并修改对应的后端cors跨域配置。希望路过的各路大神可以指点一下,初步怀疑可能是springmvc的跨域配置不支持127.0.0.1,或者浏览器的同源策略有什么其他的隐形附加条件(已迷茫)但是问题就在于两次请求前端并没有带上自身的cookie,通过查看请求可以发现请求回来的sessionid是不同的。//3. 返回新的CorsFilter。//放行哪些原始请求头部信息。
2024-07-03 00:40:26
757
原创 mysql--tinyint取反小妙招
如果你需要对tinyint类型的数据更新(0--1)而且做取反操作,我们可以使用mysql中提供的NOT关键字。我亲爱的朋友,本篇文章要给你介绍一个小妙招。
2024-06-11 16:55:19
181
原创 阻止div的点击事件冒泡
我的想法💡:点击内层的div我要执行自己内层div的change事件,但是不要触发外层div的点击事件。解决办法:一行代码搞定 onClick="event.cancelBubble = true"inactive-text="公开"active-text="隐私"情景:两个div是嵌套关系,大的div包住小的div。简单百度了下,发现是由于事件冒泡原因导致的。
2024-06-09 00:06:15
498
原创 AI初识--LLM、ollama、llama都是些个啥?
Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和部署最新大语言模型,包括如Llama 3、Phi 3、Mistral、Gemma等开源的大型语言模型。library因此,Ollama与LlamaLlama是大语言模型,而Ollama是大语言模型(不限于Llama模型)便捷的管理和运维工具。
2024-06-07 22:32:22
30004
1
原创 讨厌的HSTS策略问题
问题:浏览器添加SSL证书之后可以访问静态页面但是请求错误场景:今天刚刚在阿里云申请了个免费证书,打算吧网站升级成https,好奇玩玩,结果配完证书之后网站确实可以正常访问,但是问题在于站内的http请求都报错了。
2024-05-26 23:56:18
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人