- 博客(67)
- 收藏
- 关注
原创 注解之spring @ConditionalOnProperty
包路径:org.springframework.boot.autoconfigure.condition作用:根据某个配置变量值来控制否需要加载,常与@Configuration或@Bean配合使用源码解析:/* * Copyright 2012-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use th
2022-04-12 21:47:21 788
原创 maven中dependencies与dependencyManagement的区别
dependenciesdependencies标识了一个依赖的引入,只要出现,则代表引入jar包。如果父pom出现,那么子pom会自动把父pom引入的jar包全部引入。dependencyManagementdependencyManagement属于在parent中进行配置的一个属性,语法如截图所示。这里只是声明了一个依赖的的版本号,并没有实质引入依赖的jar包。 <dependencyManagement> <dependencies>
2022-03-02 21:59:50 558
原创 git如何撤销已commit未push的提交
一般使用git reset命令git reset有几个参数–mixed : 撤销git commit , 撤销git add, 不撤销本地改动的代码–soft : 撤销git commit , 不撤销git add, 不撤销本地改动的代码–hard : 全部撤销正常情况下,我们使用–mixed参数即可回滚到上次提交git reset --mixed HEAD^或者git reset --mixed HEAD~1回滚到n次前的提交git reset --mixed HEADn个^或者
2021-10-28 21:42:29 4482
原创 Jmeter压测教程
安装因为JMeter是一款用java编写的负载功能测试和性能测试的开源软件,所以运行的环境前提是,必须本机装有JDK,这里就不再讲解如何安装JDK了。去官网下载JMeter : http://jmeter.apache.org/download_jmeter.cgi下载二进制的zip包解压后,去bin目录里运行jmeter.bat文件使用:这里我们测试https://cn.bing.com/这个网址,搜索相关关键词java,完整的请求为https://cn.bing.com/search?q
2021-08-15 10:43:56 654
原创 spring注解方式完成参数校验
spring中给我们提供了一系列参数校验的注解,让我们告别繁琐的代码逻辑校验。@Valid@Validated开启校验的第一道大门,只有加上此属性,spring才会开始进行校验区别:@Valid 不支持 group属性,@Validated支持,group属性可以对同一个对象的属性,在不同的情况下决定是否进行校验,比如我们要操作一个Po类,在新增时,要求所有属性都不为空,但是在修改时,可以要求部分属性为空,这样@Validated可以支持这种需求,@Valid则不支持@Validated不能用
2021-07-06 15:47:39 751 1
原创 Feign入门
feign接口是一个声明式的web服务客户端,它最大的优势就是可以将url请求给隐藏起来,用优雅的方式去发送请求,使得开发者对http请求无感。不同项目之间的feign接口调用,可以通过eureka的方式进行服务注册,并轻松完成调用。feign实战入门:引入依赖包<!-- feign的依赖包 --><dependency> <groupId>org.springframework.cloud</groupId> <artif
2021-06-28 20:58:32 246
原创 swagger-ui常用注解
swagger-ui介绍:swagger-ui是一个通过注解自动生成接口文档的技术,这样我们在修改后端接口时,就可以将文档实时同步更新了下面我们来介绍一下常用的注解@Api (修饰类)常见参数value : 类的作用tags : 非空时会覆盖value的值,可以在ui界面上看到produces : 设置输出的mime类型,比如 “application/json”consumes : 设置输入的mime类型,比如 “application/json”protocols :安全协议,比如ht
2021-06-23 20:05:14 1203
原创 idea常用语法快捷键
生成一个String"zhangsan".var // 自动补全String zhangsan = "zhangsan";判断是否为nullString name = "zhangsan";name.null // 自动补全 if (name == null) { }判断是否不为NullString name = "zhangsan";name.notnull // 自动补全 or name.nn // 自动补全 if (name != null) { }f..
2021-06-20 21:16:15 427 1
原创 linux下查看文件或文件夹大小
ll -h : 查看当前文件的大小du -h –max-depth=1 * : 查看当前目录下以及当前目录下一级文件夹的大小du -sh : 当前目录的总代销
2021-05-17 16:11:13 134
原创 Vim常见查找命令.md
本次仅讲解在使用vim查询日志Bug时常用到的命令例如我们有一个test.file时,需要打开此日志直接vim test.file即可此时为正常模式,如果只是查找问题的话,我们是不需要进入插入模式的(按i键进入插入模式)查找命令/Exception n键查找下一个,N键查找上一个Ctrl + e 向下滚动一行Ctrl + y 向上滚动一行Ctrl + d 向下滚动半屏Ctrl + u 向上滚动半屏Ctrl + f 向下滚动一屏Ctrl + b 向上滚动一屏...
2021-05-16 12:36:10 253
原创 Volatile关键字
volatile关键字的作用是保证多个线程之间变量的可见性,那么他的原理是什么呢上一篇文章我们讲到java的内存模型:详情可见:JMM内存模型volatile在JMM内存的主线上加使用了MESI缓存一致性协议,这里引入了两个名词总线:简单理解的是各大CPU和主内存之间交互必须经过的一条线路,也就是说数据传输必须通过他MESI缓存一致性协议: 简单理解就是当线程A从主内存读取数据,并做修改后,线程B是立马可见修改后的变量所以volatile关键字是在上面的流程图中加了一层...
2021-05-16 12:21:43 118
原创 JMM内存模型
Java内存模型,又称JMM(Java Memory model), 是Java 虚拟机规范中所定义的一种内存模型。在此内存模型中,规定了,所有的共享变量都是存储于主内存中,每个线程都是将主内存中的共享变量拷贝一份副本,到本线程的本地内存中,然后操作此共享变量副本,修改后,再同步更新到主内存中,因此高并发下就会出现变量修改的问题了。高并发下场景:主内存中有一个值100, 线程A和线程B同时操作这个值,先拷贝一份变量到各自线程的本地内存中,然后线程A将值改为200,线程B将值改为300,然后开始回写到主
2021-05-16 11:58:53 2350
原创 各种树型数据结构的在线生成网页
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
2021-05-11 14:00:41 2963 1
原创 单元测试保存数据到数据库不生效
现象 :使用jpa保存对象,无报错,但是数据库无改动原因:Junit认为单测中不应该包含事务,所以会默认让所有的数据库的操作都设置为自动回滚解决办法:方法上加注解 @Rollback(false)
2021-05-10 20:42:12 965
原创 prometheus监控搭建(Linux服务器监控)
首先介绍接下来我们需要用到的几个软件及用处node_exporter : 用于收集Linux服务器上的数据,比如CPU,内存,磁盘等信息prometheus : 可以理解成抓取数据的服务,比如我安装了node_exporter,就可以拿到服务器的数据了,那么谁去拿这个数据呢,prometheus就可以做这样的事情,同理,如果我们有一个java程序,也可以通过prometheus去抓取到程序内的数据grafana : 图形化展示的软件 ,可以将prometheus的数据做一个可视化的展示,同时支持报警之
2021-05-04 22:52:05 733
原创 MySql的concat函数以及相关函数
concat()函数:作用:将多个字符串拼接起来,如果有任意一个字符串为null,则输出结果也为null语法:concat(param1, param2, …)concat_ws()函数:(concat with separator)作用:将多个字符串拼接起来,中间以指定分隔符连接,如果分隔符为null,则输出为Null,如果某个字符串参数为null,那么输出时会自动忽略这个参数语法: concat_ws(separator, param1, param2, …)group_concat()函数
2020-08-31 21:08:44 336
原创 jvisualvm分析hprof文件
jvisualvm是jdk8的bin目录下自带的一个分析工具,在我下载的jdk11下没有这个工具,这个工具我们可以用来分析hprof文件首先我们可以配置对应的参数,配置文件地址在\jdk8\lib\visualvm\etc\visualvm.confvisualvm_default_options="-J-client -J-Xms1024m -J-Xmx1024m -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true
2020-07-31 23:53:13 9762
原创 jhat命令分析hprof文件
当我们拿到hprof文件后,该如何分析呢,这时候我们可以用到jdk自带的jhat命令进行分析jhat -J-Xmx512M *.hprof (这里的-J-Xmx参数可以不要,如果自己机器内存够大的话)………经过漫长的等待后,出现Started HTTP server on port 7000信息时,咱们就可以使用IP+port进行访问了打开首页后,出现了是一个Arrays,这里太多了,所以我们直接忽略掉,拖到最下面,或者在页面搜索Other Queries这里我标出来的两部分就是比较重要的两
2020-07-31 23:34:50 6234
原创 jmap命令
jmap命令是Jdk自带的一个,查看jvm内存使用详情的命令首先我们输入jmap -help,查看帮助文档这里我们着重说明一下-histo命令jmap -histo pid|head -n 10 查看前10位jmap -histo pid | sort -k 2 -g -r 查看对象数最多的对象,按降序输出jmap -histo pid | sort -k 3 -g -r 查看内存的对象,按降序输出通过这三个命令,我们可以很清楚的看到当前进程中对象的大小及个数,从而辅助我们进行分析...
2020-07-31 22:31:58 16801 2
原创 MySql的Explain命令使用
MySql的Explain命令使用explain命令是mysql自带的一个命令,用于解释Mysql将如何处理SQL,执行顺序和是否使用了索引之类,我们平常可以用于SQL调优。用法则是,在SQL前面加上这个命令,比如我们的SQL为,select * from table ,那么我们使用这个命令则是 explain select * from table。这里我们运行一下命令,会得出一个表格:接下里我们逐个字段来解释含义id (较重要) 可以理解成SQL的执行顺序,id值越大,表明越先执行,如
2020-07-19 11:42:30 237
原创 MySql语法中的between语法的边界值
小知识点,在mysql中,between语法值的边界值不是固定的在比较纯数字时,例如select * from table where age between '10' and '20';是左右都包含的,等同于:select * from table where age >= 10 and age <=20;在比较日期时(timestamp)时,是包含左边边界,不包含右边边界的, 例如select * from table where creation_time bet
2020-06-18 20:52:47 1446
原创 JdbcTemplate的入门及配置
首先我们来介绍一下什么是jdbcTemplate,从名字上就能看出,就是jdbc的模版类,实际上本质上就是用java实现一个jdbc连接,只是因为这个是由Spring进行封装的,所以他们取名为jdbcTemplate,于是可以简单理解为,spring帮我们封装了jdbc,我们只需要配置,就可以直接进行使用。这里说一句题外话,spring是目前java项目中,使用最广的技术。作为一名普通的java开发,我们总是希望能了解最底层,最基础的技术,但是如果你将身份换到老板或者架构师,他们最大的希望是能够迅速进行开
2020-05-16 23:51:21 2276 1
原创 linux服务器上如何启动java程序保证后台运行
linux上有一个命令, &&的意思是,将这个任务放到后台去执行所以,如果我们想启动一个java程序,可以使用java -jar test.jar &命令
2020-05-16 22:31:26 1197 1
原创 如何得到指定日期是星期几
这里分别介绍Mysql和Java是如何获取当前是星期几的方法mysqlmysql内置了一种名为weekday()的语法,用法也很简单 weekday(20200505)或者weekday(‘2020-05-05’),然后就可以得到一个0-6的数字,其中0代表星期一,1代表星期二,以此类推。Java我们可以使用LocalDate自带的方法来进行判断/*** 获取当前日期为星期几*/@...
2020-05-05 22:00:24 387
原创 MySql中使用decimal
MySql中有一种特殊的数据类型Decimal,这种数据类型的作用是为了存储精确的数值,目前常用于标记金额等需要小数点后几位数据的列。建表语句的语法为:columnName decimal(a, b) comment '花费'其中前面的a代表小数点前几位,b代表小数点后几位,比如decimal(5,2)代表的含义就是小数点前5位,小数点后2位,则表达的最大值为99999.99。注意如果...
2020-05-05 21:40:45 1537
原创 springboot测试类如何自动注入
在我们需要写单测的时候,因为环境配置或者其他问题,需要自动注入某些类,有时候我们会使用mockito或jmockit等工具进行模拟,但是模拟有时候也不能很好的生效,所以这个时候我们可以通过注解,设置在运行类的时候,启动整个springboot项目,从而达到自动注入的效果,在测试方法运行结束后,springboot项目也就会关闭了。在测试类上加上这个注解即可,就可以使用@Autowired注解了...
2019-12-04 20:31:06 4629
原创 springboot中文页面乱码
有时候在springboot项目中,我们想抛出自定义异常信息的时候,会出现乱码,也就是???的格式,我们可以通过配置文件方式去解决这个问题yml配置文件spring: http: encoding: charset: utf-8 enabled: true force: trueproperties配置文件spring.http.encod...
2019-12-04 20:13:04 1203 2
原创 Http get方式发送请求
首先介绍一种简单的方式,因为get请求传递参数是可以直接拼凑在Url后的,这个是最基本的东西,即使有各种的工具类,本质还是这个,我们先把最本质的东西贴出来,接下来再介绍一些工具类。@Test public void test01() throws IOException { // 简单建立一个客户端 CloseableHttpClient client =...
2019-11-26 21:07:37 3491
原创 guava.RateLimiter入门
guava的RateLimiter是一个用于控制QPS(queries per second 每秒请求次数)的类,在高并发系统中,可能会出现在某个时间点,请求数暴涨的情况,很有可能对系统造成极大的压力,让系统响应时间变慢,甚至宕机。针对这种突发情况,我们可以使用限流的方法来应对。常见的限流算法有两种(漏桶算法和令牌桶算法):漏桶算法 : 以某种固定速率进行运算,同时设置可以处理的最大值,当处理...
2019-11-05 21:03:15 541
原创 SpringDataJpa查询返回空集合
当我们使用SpringDataJpa写sql查询数组时,如果数据库查询出来的数据为空,结果会是怎样的呢接口类public interface Dao extends PagingAndSortingRepository { @Query("select eneity from table") List<String> getList();}测试类:publi...
2019-10-12 10:37:35 6761
原创 Jackson反序列化map,set等复杂类型
工作中遇到了这个问题,我简单的用代码复现一下,就是一个map,value又为一个set,导致反序列化报错@Test public void test10() throws Exception { //准备一下数据 Map<String, Set<String>> map = new HashMap<>(); ...
2019-08-05 20:57:36 7557 1
原创 java泛型的使用
### 使用要点一假如当你定义了一个泛型类或者泛型接口,你可以在普通方法内直接调用泛型的类型参数,但是你没有办法在静态方法内使用泛型类型的参数使用要点二如何在静态方法内使用泛型类型的参数,使用下图的这种格式即可// 修饰符 <类型参数列表> 返回类型 方法名(形参列表)public static <T> void function(T t) {}...
2019-07-22 20:46:02 189
原创 CountDownLatch
CountDownLatch是一个同步的辅助类,主要作用是允许线程等待,直到等待的线程全部执行完成后才会继续往下走剩下的逻辑。
2019-07-12 17:59:33 421 2
原创 HTTPclient保持长连接
首先解释一下什么是长连接,当我们向一台服务器发起请求时,我们需要和对方建立一条通道,去传输数据,所谓的短连接,就是说我们建立起了通道,然后在传输完数据,就把通道摧毁,下次需要的时候再重新去建立通道。长连接呢,就是指,我们建立了一条通道,传递完数据后,先不摧毁,下次如果还需要传输数据,就复用这条通道。因为通道的建立是需要花费时间的,所以长连接的优势就在于响应速度快,但是服务器压力大,因为同时有很多人...
2019-07-03 21:05:21 14811 1
原创 HttpClient跳过https证书认证
起因是因为报了一个错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid c...
2019-06-28 18:35:41 6491 1
原创 ObjectMapper(jackson) 属性设置
ObjectMapper om = new ObjectMapper();// 属性为Null的不进行序列化,只对pojo起作用,对map和list不起作用om.setSerializationInclusion(JsonInclude.Include.NON_NULL);// json进行换行缩进等操作om.enable(SerializationFeature.INDENT_OUTPU...
2019-06-25 21:00:52 7633
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人