- 博客(31)
- 收藏
- 关注
原创 使用aop和反射对controller方法入参进行格式化(通用版)
1.使用aop和反射对controller方法入参进行格式化(简化版),功能已经实现了,但是存在扩展性的问题:自定义注解和processor的绑定工作在Enum中完成,它的扩展性是非常差的。后面我们将该功能封装为jar包之后,该如何暴露接口来扩展呢(Enum是存在jar包中的,无法动态添加)2. 摒弃Enum做绑定FieldFormatterEnum.getFormatters(获取受支持的自定义注解集合)代替方案@AutowiredSet<? extends AbstractFormat
2022-03-22 16:07:22
1023
原创 使用aop和反射对controller方法入参进行格式化(简化版)
1.问题:@JsonSerializer和@JsonFormat好用吗?必须好用,我也经常用。但是它的操作范围还是不够广泛(只操作当前field),已经满足不了我的需要了2.开搞2.1 准备工作《一个vo》@Datapublic class UserInfoVO implements Serializable { private static final long serialVersionUID = 1L; @DtFormatter(order = 1) @DtFormatt
2022-03-18 18:42:11
540
原创 使用规则执行器替换java中if语句
使用规则执行器替换java中if语句干掉 if else,让代码容易扩展1.首先2.用户基类3.规则校验基类4.用户信息校验规则基类5.用户校验规则实现类,这里我写了两个,分别校验(UserInfo.addr是否以北京开头)和(UserInfo.age>=18)6.最重要的规则实现类7.测试干掉 if else,让代码容易扩展在公众号(链接:https://mp.weixin.qq.com/s/33S0KgZuGjddwY9gyAa1Iw)中看到这样一个规则执行器用来替换掉大量的if语句,本想在本
2022-01-07 16:19:52
1024
原创 es+logstash做搜索
linux安装软件linux环境:1`elasticsearch-6.8.12.tar.gz2`elasticsearch-analysis-ik-6.8.12.zip3`logstash-5.6.0.tar.gz (ex:刚开始做es时候用的es版本7.x,但是linux中安装的jdk是1.8版本的,7.x需要jdk11,后来查询找到es5.x版本支持jdk1.8,就安装的es5.6.0,由此logstash也就安装的5.6.0版本的,之后linux安装,调试没问题了,去做spring boo
2021-01-08 15:27:26
549
原创 多线程
ThreadList itemThread 的 run() 和 start() 属于模板设计模式不能多次启动线程(执行t.start())线程生命周期结束不能调用.start()volatile只能保证可见性,不能保证一致性实现线程的执行单元有两种方式,1·重写Thread的run(),2·实现Runnable接口的run()上面两种方式一个重要的区别是:Thread的run()是不能共享的,也就是A线程不能将B线程的run()作为自己的执行单元生命周期new 使用new 创建 Th
2020-12-15 17:13:15
127
原创 JVM
- 软引用softRefrence创建的对象,该对象在内存不足的时候会被回收,不会产生内存溢出当一个对象与gc roots间存在强引用时,无论何时都不会被gc回收软引用对象在内存不足的时候会被回收,并且刚刚构建的软引用会尽可能保留有效解决oom问题适合缓存非必须的大对象//创建强引用String s = new String("test");//创建软引用关联该对象SoftRefrence<String> softRef = new SoftRefrence<Stri
2020-12-11 15:52:34
80
原创 算法
接口限流算法:1·漏桶算法:桶里面存放请求,服务器根据固定的速度处理请求,桶满了丢弃请求。缺点是处理速度固定2·令牌桶算法:桶里面存放令牌,请求现获取令牌,有令牌了服务器才会处理请求,缺点是令牌数量问题通常两者结合使用...
2020-12-04 17:41:33
85
原创 java深入学习
CharSequence接口:字符序列接口实现类:AbstractStringBuilderAttributedSegment in TextLayoutStrategyBase64DataBase64DataByteBufferAsCharBufferBByteBufferAsCharBufferLByteBufferAsCharBufferRBByteBufferAsCharBufferRLCachedSegment in SegmentCacheCharArrayChar.
2020-12-04 17:10:04
189
原创 自定义注解
元注解和自定义注解元注解:描述注解的注解@Target、@Retention(保留策略:source-源文件,class-class文件,runtime-jvm加载class文件后依旧存在)、@document、@Inherited自定义注解:除以上四个,其他都是自定义注解使用:1·声明注解@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})@Documentedpublic @interface ParamLo
2020-11-10 14:01:29
123
原创 spring boot admin 404问题
使用spring boot admin查看在线日志遇到的404问题问题描述:项目中因为兼容问题 2.1.6版本启动不了。最终使用的2.3.0版本。发现配置了logging: file: name: E:\\log\\system/info-system.log之后,出现了日志文件菜单,但是显示404 not found。网上处理方法(logging.path,logging.file,logging.file.name,logging.file.path)依旧行不通。最后还是翻源码
2020-11-04 15:12:57
3402
2
原创 线程
创建线程时核心线程满了之后为什么放入阻塞队列,而不是创建新的线程?·······线程池创建线程需要获取mainLock锁 影响并发效率,引入阻塞队列做缓冲作用
2020-10-22 15:39:36
79
原创 服务器端消息推送技术
当客户端向服务端发请求,服务端抓住请求不放,SSE(server send event)需要新式浏览器每5秒向浏览器推送消息import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind. annotation.ResponseBody;@Controller
2020-10-19 17:40:20
263
原创 linux相关
jenkins服务报500错误未找到服务:通常是端口占用,通过ps -ef|grep {项目进程名}找到端口号,然后kill调重新部署
2020-10-13 15:25:44
105
原创 json处理
controller中关于request中jsonBody的接收1` (@RequestBody String bodyParams) :直接使用string接收最好设置@PostMapping(value = "/importSimpleAcount",produces = "application/json;charset=UTF-8") 的produces 属性最近需要调第三方的接口,这种方便一些,不需要再转一次了2` (@RequestBody HashMap<String,Ob.
2020-09-29 10:17:57
65
原创 postMan测试
- 测试数组controller: @PostMapping(value = "/master-data/details",consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<Object> findMasteDataByIds(@RequestBody String[] guids){}header中body中
2020-09-15 18:59:20
194
原创 spring注解整理(持续更新)
1·@configuration表明当前类等效于一个xml文件没有使用@componentScan,表明所有bean都在此类中定义2·@bean返回一个bean,bean的名称为方法名在spring中,容器中存在某个bean,就可以在另一个bean的生命方法的入参中注入3...
2020-09-08 14:52:07
224
转载 not exists
exists,not exists的使用方法示例,需要的朋友可以参考下。学生表:create table student(id number(8) primary key,name varchar2(10),deptment number(8))选课表:create table select_course(ID NUMBER(8) primary key,STUDENT_ID NUMBER(8) foreign key (COURSE_ID) references cour
2020-07-24 12:53:24
467
原创 sql优化
1. 索引数量一个表的索引最多不能超过6个2. 建立索引多数使用很少修改数量差异大3. 复合索引在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致4. 索引失效1. like语句前端模糊查询2. where子句使用 != 或 <> 操作符优化如SQL:SELECT id FROM A WHERE ID != 5 优化成:SELECT id FRO
2020-07-24 12:52:35
132
原创 jion on
left join如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据on后面在join中on是起到关联关系的连接作用,on后面指定的是关联条件,比如select * from A a left join B b on a.clientno=b.clientno 就是当两张表clientno相同才能关联上,如果后面再跟上and的话,就是要同时满足这两个条件,如 select * from A a left join B b on a.cli..
2020-07-24 11:40:19
511
原创 like索引情况
结论:like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。like keyword% 索引有效。like %keyword% 索引失效,也无法使用反向索引优化:LOCATE(substr,str):返回字符串str中第一次出现子字符串的位置 substr,没有返回0table.field like ‘%AAA%’ 可以改为 locate (‘AAA’ , table.field) >
2020-07-24 11:08:08
282
原创 count各种区别
count(1),count(*),count(列名)count(1)和count()区别不大,count(列名)会过滤空值。count(1)计算有多少个符合条件的行,1不是指一个字段,而是一个固定值,表中有一个字段,固定值为1,count(),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些...
2020-07-24 10:48:01
343
原创 controller参数接收
restful( someUrl/{paramId})格式url中参数@PathVariable@RequestMapping(value = "/cxhdlb/{param}", method = RequestMethod.GET) public List<String> findEventList(@PathVariable String param) { System.out.println(param);}request header部分..
2020-07-10 12:59:52
578
原创 group by用法
group by 后面跟having 不跟and原则:select后面跟的列中没有使用聚合函数的都要出现在group by后面 and 和or 一般bai用于where后面,用于条件之间du判断的谓词 HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选...
2020-07-09 11:45:03
983
1
原创 json串的发送和接收
发送package com.utils;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;import net.sf.json.JSONObject;public class testOne { public static void.
2020-07-09 11:28:42
303
原创 拦截器和过滤器
过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等拦截器依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的..
2020-07-09 11:15:26
75
原创 new对象的销毁
new创建的对象什么时候销毁?没有引用指向它的时候class test { public static void main (String[] args) throws java.lang.Exception { B b = null; { A a = new A(); b = a.getB(); } //离开这个花括号,a消亡,a的属性b也不复存在(注意b是变量),但是main的b还是存在 .
2020-07-09 10:53:14
770
原创 left join
left join on 后面加条件和where后面加条件区别student表和grade表统计所有有成绩的学生信息:SELECT stu.*FROM student stu LEFT JOIN grade gra on stu.id = gra.c_stuId AND gra.c_fs IS NOT NULL结果:原因:on后添加的条件不会影响主表,只是关联条件,where条件查询发生在匹配阶段之后。正确sql如下:SELECT stu.*FROM
2020-07-08 23:51:49
138
原创 string拼接
中间产生stringBuilder对象,JDK1.5之前是stringbuffer str1和str2拼接首先调用string.valueOf(obj),代码实现是 return obj == null? "null":obj.toString(),然后产生stringBuilder,调用append方法创建几个对象String str = new String(“abc”);两个对象首先String的构造器:public String(String original) { //oth
2020-07-08 23:11:04
718
原创 linux神秘代码
系统信息date:显示系统日期date 041217002007.00 设置日期和时间 月日时分年.秒clock -w 将时间修改保存到bios关机shutdown -h now 关机init 0 关机telinit 0 关机shutdown -h hours:minutes 预定时间关闭系统shutdown -r now 重启reboot 重启logout 注销文件和目录cd /home 进入/home目录cd…/… 返回上两级目录cd 进入个人主目录pwd
2020-07-07 17:44:24
71721
原创 git神秘代码
git clone git initgit statusgit add git mv 改文件名git rm 删除文件git commit -m “message”git log 查看提交历史git branch 显示所有分支-r 所有远程分支-a所有本地和远程分支git checkout 切换分支-b 新建分支并切换git branch -d 删除分支git fetch 从远程库获取代码git stash 缓存git stash pop 取出...
2020-07-07 17:43:52
118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人