- 博客(52)
- 收藏
- 关注
原创 利用@RequestBody和@ResponseBody处理参数校验
这两兄弟在处理请求的过程中,RequestMappingHandlerMapping帮忙做了url与方法的具体映射,RequestMappingHandlerAdaptor帮忙做了查找具体的处理程序和查找具体的将返回值处理为一个ModelAndView实例的程序。还是在上篇文章中关注的这一行,现在需要关注的是变量ha,发现他的类型是RequestMappingHandlerAdapter。resolveArgument方法是处理参数的方法,如图所示,这是一个反序列化的方法,将流转换为对象。
2023-03-23 13:52:22
1154
原创 @RequestMapping是怎么处理映射的?
RequestMapping通过pathLookup维护了一个MultiValueMap类型的变量pathLookup,pathLookup是通过RequestMappingHandlerMapping初始化的,而这个初始化的过程发生在Spring容器初始化bean的过程中。
2023-03-22 14:46:27
699
原创 类的覆盖的实现方式
这是两个月前在工作中遇到的问题,重构的项目引入了swagger,但是有些地方swagger的实现并不完善,譬如,在没有指定bean的字段的数据类型时,swagger默认当做String处理,而实际上可能是Integer或者Long,这时就会抛出NumberFormatException,虽然并不影响使用,但是看到这样的日志也会很不爽。于是新建了同名目录,将报错的类修改了一行代码。但是,为什么这样可以覆盖jar包中的类呢?最开始是刚工作的时候,见到有的老人这样搞,来实现一些骚操作,个人一直是知其然不知所
2022-06-08 23:25:02
1558
原创 mysql优化器使用方式
SET optimizer_trace=“enabled=on”;需要分析的sqlSELECT * FROM information_schema.OPTIMIZER_TRACE;SET optimizer_trace=“enabled=off”;
2022-03-04 08:59:20
210
1
原创 @JsonProperty和@JsonAlias
@JsonProperty序列化和反序列化时,该java属性所对应的名称@JsonAlias只在反序列化时,指定该java属性可以接受多个名称测试代码:controller:bean:@JsonProperty与@JsonAlias一起用只有最后一个赋值有效只用@JsonAlias同上,最后一次有效赋值会保留。...
2022-02-26 11:01:55
894
原创 记录一次分布式锁引发线程饥饿导致死锁问题
这是2021年十月中旬时出现的问题,一次压力测试中,平均一个接口同时被3000个线程请求,最终导致很多线程等待超时,影响压测结果。压测环境部署了两台服务,共用一台redis。分布式锁的实现方式是:在获取锁时,使用lua脚本在redis中创建一个String类型的key,key的value是时间戳。在释放锁时,使用lua脚本删除这个key。并发情况时,线程用setnx查看是否存在,已经存在key时,读取value,对比当前的时间戳是否超过了10秒,超过10秒则删除上一个key并且执行获取锁的脚本,否
2022-02-08 14:19:08
1059
原创 使用java做mysql数据迁移时遇到的两个问题
有个数据迁移的需求,需要将A数据库的数据迁移至数据库B。我以为直接生成mysqldump脚本再跑一下就行了,但是发现并不行。问题出在
2022-02-08 10:40:01
1271
2
原创 使用java-websocket框架开发websocket客户端时遇到的两个问题
WebSocketClient objects are not reuseableYou cannot initialize a reconnect out of the websocket thread. Use reconnect in another thread to insure a successful cleanup.今天主要解决如上这两个问题。使用的java-websocket版本是1.5.1参考的文章:关于WebSocket的 WebSocketClient objects .
2021-11-06 15:27:08
6917
2
转载 理解http幂等性
https://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html
2021-09-15 13:20:28
59
原创 java.sql.Timestamp.toLocalDateTime()会丢失精度
当使用代码类似于ResultSet.getTimestamp("start_time").toLocalDateTime();在start_time为0秒时,返回的时间会丢失精度正常情况下:2021-09-03 10:10:08,时间可以正常转换,转换结果是2021-09-03 10:10:08极端情况下:2021-09-03 00:00:00,时间转换会丢失秒,纳秒,毫秒,实际结果是2021-09-03 00:00上代码public LocalDateTime toLocalDateTim
2021-09-03 10:55:41
1292
翻译 mysql的SSL配置选择
The defaults for initiating a connection to a MySQL server were changed in the recent past, and (from a quick look through the most popular questions and answers on stack overflow) the new values are causing a lot of confusion. What is worse is that the st
2021-08-16 21:31:59
1229
转载 postgresql实现多表关联删除性能分析
转载自:https://mp.weixin.qq.com/s?src=11×tamp=1628513358&ver=3242&signature=s26j91cKXj5oZohocJhY7DRGiRgSnzIvowxS9OymsLiHXjUfK7JZihyGpLlHVUYmdQk9pJfAwx4WZ0ThI8zewPLF8ItKTCO7V4wbLSNhgEzlDjqssW2JooLFLkHxKR&new=1导读:最近在进行sql编写时,发现delete +usi
2021-08-09 21:40:57
2324
转载 MySQL replace语句
**转载自:https://www.cnblogs.com/sunss/p/4493803.html**语法:REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...Or:REPLACE [LOW_PRIORITY | DELA
2021-08-09 14:16:31
664
转载 Jackson之LocalDateTime转换,无需改实体类
转载自:yzeng【问题】Demo: LocalDateTime dt = LocalDateTime.now(); ObjectMapper mapper = new ObjectMapper(); try { String json = mapper.writeValueAsString(dt); System.out.println(json); } catch (JsonProcessingException e) { e.printStackTr
2021-08-03 11:10:19
1186
转载 解决方法:linux中无法使用root用户ssh远程登录
一,修改root用户密码sudo su - #切换到root用户 sudo passwd -u rootsudo passwd root #设置密码二,编辑 /etc/ssh/sshd_config文件cd /etc/ssh/lsvi sshd_config找到PermitRootLogin,注释掉这一行添加PermitRootLogin yes,保存,退出。三,执行 sudo service sshd restart四,查看 ps -au|grep sshd 。中,有ro
2021-07-23 15:32:38
6313
原创 postgresql显示表字段及类型
SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen AS length, a.atttypmod AS lengthvar, a.attnotnull AS notnull, b.description AS commentFROM pg_class c, pg_attribute aLEFT JOIN pg_description bON a.attrelid = b.objoidAND a.attnum = b.ob
2021-07-17 11:43:59
766
原创 Spring MVC中Context initialization failed解决方案
项目中还在使用SpringMVC框架进行开发,接到一个需求要把mysql数据库改为使用postgresql。修改Tomcat中的server.xml中的数据库连接池后,发现并不能正常启动,抛出Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘XXXXService’: Injection of autowired dep
2021-07-17 11:38:19
4743
2
转载 postgresql 如何设置主键自增
法一:CREATE TABLE customers(customerid SERIAL primary key ,companyname character varying,contactname character varying,phone character varying,country character varying)法二CREATE SEQUENCE event_id_seqSTART WITH 1INCREMENT BY 1 NO MINVALUE NO MAX
2021-07-16 15:06:29
197
原创 mysql字段值如何区分大小写
https://www.cnblogs.com/baby123/p/11384492.html1.查询时指定大小写敏感在查询时指定大小写“敏感”,加关键字“BINARY”drop table binary_test;CREATE TABLE binary_test ( `id` INT unsigned PRIMARY key NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARS
2021-07-16 14:37:45
3288
转载 在postgresql中使用group_concat
转载自:https://www.imooc.com/wenda/detail/575487drop AGGREGATE group_concat(anyelement);CREATE AGGREGATE array_agg (anyelement)( sfunc = array_append, stype = anyarray, initcond = '{}');select group_concat(id) from table_name->{1,2,3,4,5,
2021-07-07 13:40:39
1254
原创 如何关闭mysql secure_file_priv
linux下打开my.cnf,一般在/etc目录下Windows下打开my.ini,一般在安装目录在[mysqld]下加入secure_file_priv = /tmp后再重启然后把此行注释掉#secure_file_priv = /tmp再重启试试系统好像默认是开启的,然后还没写此选项,这样才能激活...
2021-07-05 16:24:31
1299
转载 DateTimeFormatter自带格式
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")): 2019-04-17 17:38:57now.format(DateTimeFormatter.ISO_LOCAL_DATE): 2019-04-17now.format(DateTimeFormatter.ISO_DATE): 2019-04-17now.format(DateTimeFormatter.ISO_L
2021-06-30 09:55:55
1465
原创 尽量不踩坑配置postgresql
首先放参考链接:https://www.cnblogs.com/mchina/archive/2012/06/06/2539003.htmlhttps://www.runoob.com/manual/PostgreSQL/index.htmlhttp://www.wfuyu.com/datay/21064.html接着放简略版依次执行就完事了./configuremakesumake installadduser postgresmkdir /usr/local/pgsql/data
2021-06-24 09:33:24
136
转载 MySQL--索引条件下推优化
一 什么是“索引条件下推”“索引条件下推”,称为 Index Condition Pushdown (ICP),这是MySQL提供的用某一个索引对一个特定的表从表中获取元组”,注意我们这里特意强调了“一个”,这是因为这样的索引优化不是用于多表连接而是用于单表扫描,确切地说,是单表利用索引进行扫描以获取数据的一种方式。二 “索引条件下推”的目的用ySQL官方手册描述:The goal of ICP is to reduce the number of full-record reads and the
2021-06-18 11:16:41
251
原创 mysql从索引角度优化
mysql优化索引 —— Using filesortMySQL–索引条件下推优化「Using where; Using index」和「Using index」 区别是什么
2021-06-16 11:11:27
80
转载 SpringMVC跳转到html页面以及Controller返回html页面的乱码问题
两个文章:https://www.cnblogs.com/lone5wolf/p/11534002.htmlhttps://www.cnblogs.com/jixiaohua/p/10421127.html一、SpringMVC跳转到html页面1、自定义视图解析器: public class CustomResourceView extends InternalResourceView { @Override public boolean checkResource(Locale
2021-06-10 10:18:40
945
转载 Spring Boot中使用@Transactional注解配置事务管理
讲的很详细,以后经常复习https://www.cnblogs.com/kaleidoscope/p/9467192.html
2021-05-07 16:50:12
92
转载 java中的native是什么
native主要用于方法上一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现。在定义一个native方法时,并不提供实现体(比较像定义一个Java Interface),因为其实现体是由非Java语言在外面实现的主要是因为JAVA无法对操作系统底层进行操作,但是可以通过jni(java native interface)调用其他语言来实现底层的访问。参考链接:https://www.jianshu.com/p/
2021-04-14 21:31:26
539
转载 idea生成返回值快捷键
右键Refactor-Extract-Variable,也可以按快捷键ctrl+alt+v举个例子,在这一行按快捷键生成如下代码
2021-04-14 11:34:49
3078
转载 Redis主从模式、哨兵模式和集群的相关操作
1、主从模式(1)特点有且仅有一个主节点Master,从节点slave可以有主节点master可读可写,从节点slave只能读;主节点将读的操作交给了从节点,变向的提高了自己写的能力(2)配置步骤(同一台服务器,利用不同端口进行部署)1】在/usr/local目录下,创建一个/redis/master-slave目录2】 在master-slave目录下,创建三个子目录6380、6381、63823】 依次拷贝redis解压目录下的redis.conf配置文件,到这三个子目录中4】 进入63
2021-04-07 19:23:32
169
转载 MapperScan扫描多个包写法
https://blog.csdn.net/u013059432/article/details/80239075
2021-03-31 23:52:11
14994
3
转载 强软弱虚引用,只有体会过了,才能记住
以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝知此事要躬行。Java中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、虚引用。Java为什么要设计这四种引用Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说的专业点,叫可达性分析。Java设计这四种引用的主
2021-03-30 22:57:47
97
转载 redis集群原理
尊重原创,转载请标明出处:https://www.cnblogs.com/liyasong目录3.0版本之前 3.0版本及以后正文redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了。官方的一个简单测试:测试完成了50个并发执行100000个请求。设置和获取的值是一个256字节字符串。结果:读的速度是110000次/s,写的速度是81000次/s在这么快的读写速度下,对于一般程序来说足够用了,但是对于访问量特别大的网站来说,还是稍有不足。那么,如何提
2020-10-25 16:52:04
84
转载 教你如何干掉你代码中的一坨if-else
对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分支的时候,就会很难添加,极其容易影响到其他的分支。笔者曾经看到过一个支付的核心应用,这个应用支持了很多业务的线上支付功
2020-09-11 10:10:00
267
转载 Docker删除镜像和容器
当一个host中镜像和容器较多,需要重置时可选择删除其中部分或全部的镜像和容器。那么你就需要下面的操作了。1、删除容器1)首先需要停止所有的容器docker stop $(docker ps -a -q)2)删除所有的容器(只删除单个时把后面的变量改为container id即可)docker rm $(docker ps -a -q)2、删除镜像1)查看host中的镜像docker images2)删除指定id的镜像docker rmi 想要删除untagged images,也就是
2020-09-09 15:04:38
618
原创 阿里云ecs部署redis本地连接不上
献丑了,本人第一次使用阿里云ecs,没想到闹了个大笑话。服务器上部署了redis并启动之后,本地java服务一直连不上,先后把linux防火墙关了,设置开放端口,设置守护进程关闭,重启服务,还是连不上。后来问了同事,原来是阿里云ecs也要加开放端口最后终于解决了,放上测试代码public class JedisTest { public static void main(String[] args) { try (Jedis jedis = new Jedis(ip, 63
2020-09-03 16:48:42
1039
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人