
随笔一记
libingbojava
一个擅长写bug的呆逼~
展开
-
在linux 上启停jar包的脚步总结
liunx 下启停服务的脚本原创 2022-10-10 16:20:02 · 304 阅读 · 0 评论 -
JSR303参数安全效验
validation 的JSR303参数安全效验原创 2022-10-10 14:58:16 · 217 阅读 · 0 评论 -
springboot手动新建事务和提交事务
首先要获取springboot自带的 核心事务管理器PlatformTransactionManager自动注入核心事务管理器: @Autowired private PlatformTransactionManager transactionManager;// 引入 (平台)事务管理器,Spring 事务策略的核心。在某些代码执行前,开启一个新事务 // 发起一个新事务 DefaultTransactionDefinition def = new Def原创 2022-05-27 17:47:59 · 4365 阅读 · 0 评论 -
springboot 过滤器 总结
filter:1: 在启动类上加一个注解 @ServletComponentScan(basePackages=“需要扫描的过滤器”)2: 新建myFilter 继承接口 Filter3:在myFilter 上添加 @WebFilter(filterName=“过滤器名称” urlPatterns=“过滤规则” )4:重写 三大方法 doFilter , init ,destroy注意: 三个方法最好都重写一遍, 不要只重写 doFilter 方法。 在tomcat9.0一下版本部署可能失败。原创 2022-05-26 15:20:19 · 438 阅读 · 0 评论 -
@Async 执行异步方法
TestController内写: @Autowired ComprehensiveAnalysisController comprehensiveAnalysisController; @GetMapping("async") public String getAsyncInfo(Map map) { System.out.println("--------------------"); comprehensiveAnalysisCo原创 2022-02-28 18:06:08 · 517 阅读 · 1 评论 -
关于 数据对接入库失败后的 补录机制的一些想法
目前在做的系统中,有一些功能模块需要从三方服务或者公司内部别的系统数据库中定时的拉取数据,拉取数据后再入库到自己的系统。数据接入是定时的, 但是有这样的情况出现:三方的数据提供方或者数据源有时候数据提供的不及时, 数据提供延迟几小时或者几天都有可能, 这时候用定时任务去拉取数据的方式就不能满足实际的需求了。比如:我的系统有一个定时任务,每天凌晨2点去拉取昨天的数据处理并入库。 理想情况下这样的数据接入方式是可行的。 但是当数据源提供方提供数据延迟了几天, 那么这几天系统的定时就不能够拉取到数据了, 因为定原创 2022-01-26 15:02:14 · 2151 阅读 · 1 评论 -
sql 统计汇总 将null 排在最后
<select id="selectScoreInfo" resultType="java.util.Map" parameterType="java.util.Map"> select DZShare.T_Y_SBBHDEVICE_SITE.* , ROUND(DZShare.T_Y_SCORE.actual_score ,2) as actual_score , ROUND(DZShare.T_Y_SCORE.total_score ...原创 2022-01-20 16:27:01 · 882 阅读 · 0 评论 -
sql 求日期均值
备忘一下 在sql中求日期均值的语句首先:AVG() 只能作用与数值型字段, 不能作用于日期字段。所以不能像求数值均值一样求日期均值。要求日期均值, 需要先把 日期转为Long , 然后对转后的Long求均值, 对Long求完均值,在把Long转为日期格式。UNIX_TIMESTAMP( time) 函数可以把日期转为Long 。FROM_UNIXTIME(time)函数可以把Long类型的数值转为日期。具体操作如下:FROM_UNIXTIME(avg(UNIX_TIMESTAMP( ti原创 2021-12-09 18:57:50 · 4686 阅读 · 1 评论 -
case when 的使用
`简单说下 case when 的用法。当想用一条语句 按不同的角度统计数据时, 可以考虑使用case when的用法。比如说, 表table里有一个状态字段, 值1代表已完成, 值2代表未完成。 此时想统计 table表中所有数据个数, 和 已完成的数据个数 ,和 未完成的数据个数。这时候该如何操作呢? select count(1) table where 1=1 // 查全部 select count(1) table where status=1 // 查已完成原创 2021-12-02 17:45:48 · 2143 阅读 · 1 评论 -
DENSE_RANK() 函数的使用
业务场景:按月对每个工地状态进行评分, 满分一百分, 对每个工地评分后, 进行排名, 要求相同分数的工地排名相同在我不知道DENSE_RANK()这个函数前, 我是对每个工地进行算分,所有工地是一个list , 工地的分数在list的map里。如:[ { key:“工地1” , score:80 } , { key:“工地2”, score:90} , { key:“工地3”, score:60}]在这样一个数组中, 对工地按评分排名, 其实就是把List数组按map中的某个属性进行排名。 但是这原创 2021-11-26 18:02:02 · 5046 阅读 · 0 评论 -
对List中的map或bean的某个属性排序
按List中的Map对象的某一个属性值对整个List进行排序:(自己写的找不着了,这是别人的代码)//在进行排序之前可以加入此条件,list集合不能为空且数量要大于1个if(list!= null && list.size() > 1) Collections.sort(list, new Comparator<Map<String, Object>>(){ public int compare(Map<String, Object&原创 2021-10-11 19:27:46 · 837 阅读 · 1 评论 -
多表逗号隔开联查, inner join , left join 的理解--如何优化慢查询
今天在写一个业务的时候, 遇到了一个慢查询。我习惯写业务之前先将sql写好, 这样可以确保写业务之前数据源是对的,并且可以先看到自己写的sql慢不慢,有没有可以优化的地方。 今天在写sql时就遇到了一条很慢的sql.我最开始写的sql是这样的: -- 总共1517条结果 SELECT count(*) FROM DZShare.T_C_HISDATA_1H H , DZShare.T_C_AI_D A , DZShare.T_Y_SBBHDEVICE_SI原创 2021-10-11 19:07:26 · 3417 阅读 · 0 评论 -
搭建后台系统的一些总结教训
来的新公司接手一个新的项目,自己从0开始搭建了后台系统,由于之前都是用的老项目,底层都是前辈们搭建好的,自己在新系统中将老项目的思路借鉴了过来,以为可以高枕无忧,事实证明确实不行。项目在整个使用过程中,还是暴露出来了很多问题,这些问题在最初搭建项目时都没有很好的考虑到,导致后期要更改的话代价太大成本太高。所以自己将自己在搭建系统的工程中踩的坑吃的亏都记录下来。给后续自己搭建系统时做个参考。1:系统将数据返给前端时,没有对 日期 类型做统一的格式化处理系统返给前端的数据中少不了包含时间格式的数据,而前端也原创 2021-10-05 01:03:19 · 333 阅读 · 1 评论 -
项目中用到的 数字保留两位小数的代码,备份用
项目中会设计一些统计 百分比 的数据内容。有两种情况, 一种是 用字符串显示百分比 , 如45.56%此时使用: NumberFormat nt = NumberFormat.getPercentInstance(); //设置百分数精确度2即保留两位小数 没有考虑任务数量为0的情况 nt.setMinimumFractionDigits(0); //计算百分比 float accounted = 0F;原创 2021-09-30 16:36:14 · 696 阅读 · 0 评论 -
knife-4j 点击列表出现空白页怎么办?
之前遇到过点击knife-4的左侧列表项出现了空白页,而且同一个列项出现了两次。 怎么解决呢?网上没找到解决的方法, 最后脑袋一想,可能是特殊字符的原因。/** * <p> * 任务信息表 前端控制器 * </p> * * @author jobob * @since 2021-08-26 */@RestController// 如果在@Api的tags的值中出现了 “/” 这样的特殊字符,会出现上述点击tags出现空白页的情况@Api(tags = "任务原创 2021-09-26 19:30:01 · 2405 阅读 · 0 评论 -
如何在项目启动后执行一段代码?
使用 ApplicationRunner 这个类来对项目启动后做一些初始化的工作如:项目启动后,连接websorcek实现ApplicationRunner的run方法, 在项目启动后, 会自动执行run方法中的内容package com.diting.hb2.fastdevlop.commons.util;import com.alibaba.fastjson.JSONObject;import com.diting.hb2.fastdevlop.commons.cache.DatacodeC原创 2021-09-26 19:11:27 · 369 阅读 · 2 评论 -
返回给前端的数据中指定日期格式
在后端返给前端数据时, 统一日期格式是必要的,全局设置日期格式如下:在application.yml中配置:spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8设置完之后, 如果对个别时间需要特殊格式的处理, 则需要在代码中自己转换。...原创 2021-09-26 19:06:52 · 1936 阅读 · 0 评论 -
docker 安装 nginx
docker search nginxdocker pull nginxdocker images nginx// 在/usr/local/tmp下建立一个nginx-config文件夹, 用来存放nginx相关信息,做文件挂载使用在nginx-config下创建config文件夹, 在config文件夹下创建nginx.config来存放nginx配置信息在nginx-config文件夹下创建home 文件夹, 用来存放前端网页cd /usr/local/tmpmkdir nginx-c原创 2021-07-11 14:18:59 · 93 阅读 · 0 评论 -
order by使用索引列排序时会失效吗?
order by使用索引列排序时会失效吗?在使用order by对某列进行排序时, 其sql一定进行了多表联查的操作. 说白了肯定做了表关联. 既然有表关联, 那order by排序就可以对任意的表进行排序. 那么应该对那个表进行排序好点呢?先说结论, order by后面跟的索引列只是对 驱动表才起作用, 也就是说如果是对驱动表进行排序, 那么order by后面的索引是起作用的, 但是如果order by后面跟的排序字段不是驱动表的, 那么这时索引是不起作用的.问题来了 , 什么是驱动表?原创 2021-07-10 17:28:40 · 5959 阅读 · 0 评论 -
主键生成策略
介绍一个建的主键生成策略.大体思路是这样子的:程序中免不了要对数据进行新增操作, 而新增数据就需要一个id. 当每次插入数据时,使用数据库直接生成效率不高, 一种比较好的方法是 , 先使用数据库的sql语句(比如存储过程,函数)一次性生成1000条数据, 然后将这1000条数据放到系统缓存中. 每一次新增数据时, 从缓存中取出一条id , 这样就不用每次都从数据库直接生成. 当缓存中的数据不够用时, 我们再调用存储过程或函数, 一次性生成1000条放到缓存中.有了这个思路, 我们就可以开始了.我们原创 2021-07-03 23:12:09 · 324 阅读 · 0 评论 -
springboot 操作rabbitmq 的一些心得记录
导入的pom是: <!-- rabbitmq --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>先常见一个消息生产者:impo原创 2021-07-02 15:59:46 · 175 阅读 · 1 评论 -
AOP 实现日志记录的功能
要求:在controller层对update , insert , delete类型的请求对应的方法 进行拦截, 然后获取方法的请求参数,根据不同的请求类型, 想日志表中计入不同的内容. 这样就可以实现每次改动数据库中表时,就会记录日志.一般日志表会会记录如下内容:修改人id表名称修改数据行id修改时间请求端ip地址修改内容实现方式:我们以update操作计入日志为例在controller层的update类型的方法上加一个注解(可以是自定义注解, 也可以用springboot的注解原创 2021-07-01 16:15:12 · 1462 阅读 · 3 评论 -
docker 安装 jenkins
1: docker search jenkins选择 jenkins/jenkins 的镜像2: docker pull jenkins/jenkins3:docker run -di -p 8009:8080 --name myjenkins jenkins/jenkins:latest4:docker exec -it myjenkins bash5: cd var cd jenkins_home cd secrets6: cat initialAdminPassword复原创 2021-06-30 12:42:43 · 359 阅读 · 0 评论 -
hystrix 高并发时 请求缓存 详解
在高并发时, 客户端发起请求, 到达服务A , 服务A要三次调用服务B , 为了减缓服务器B的压力, 请求缓存的设计思路是: 在第一次调用服务B后, 将结果缓存到Redis中, 当第二次和第三次进行相同的调用时, 直接从缓存中取到结果, 不再向服务器B发出请求, 从而达到减缓服务B压力的效果.需要注意的是 , @Cacheable(cacheNames = “key”) 注解不能放在Controller层的接口方法上, 因为客户端每次发来一个请求, 都会开一个新的线程, , @Cacheable是给服务内原创 2021-06-29 23:31:15 · 179 阅读 · 0 评论 -
熔断器之线程池隔离与信号量隔离
在Hystrix中,介绍两种处理高并发的解决方案。首先需要理解高并发的情况下系统会出现什么样的问题。当部署完一个服务后,这个服务会向外界开放多个接口, 比如 一个烂大街的商城系统可能有 订单查询接口, 个人中心接口 , 付款接口 ,商品查询接口。 当服务部署好之后,没有其他配置时, tomcat默认开启一个线程池, 这个线程池中有200个线程供使用。 这时候, 这四个接口都有对这个线程池的使用权,也就是说这四个接口共享一个线程池。 当访问量小的时候系统没有问题, 但是遇到突发情况,比如一类爆款...原创 2021-06-29 22:01:30 · 2064 阅读 · 0 评论 -
mybatis-plus自动生成代码以及page的使用
先说使用mybatis-plus自动生成代码根据官网的步骤,先在pom中加入坐标: <!-- 代码生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>原创 2021-06-26 14:46:40 · 2092 阅读 · 0 评论 -
json_object_agg 的用法
在数据库查询中,遇到这样一个需求:从用量数据表中将表计每天的用量数据统计出来。用量表主要记录了每块表计每天用了多少电/气。select meter_id ,json_object_agg(to_char(data_date , 'yyyy-MM-dd HH24:mi:ss') , dosage) as data_info from g_meter_energy_day...原创 2021-06-01 15:33:27 · 2524 阅读 · 0 评论 -
sql中in查不出数据怎么办?
在写代码的时候突然想到一个问题,用in关键字查不出来东西怎么办? sql报错怎么办?自己试着在数据库写了一下:select * from cons_account where id in ( )guor原创 2021-05-28 18:37:08 · 2445 阅读 · 0 评论 -
一次性解决xls 格式文件导入问题,区别对待-XSSFWorkbook 和 HSSFWorkbook
统一导入的pom文件:org.apache.poi---poi---3.17 org.apache.poi---poi-ooxml---3.17org.apache.poi---poi-ooxml-schemas---3.17org.apache.poi---poi-scratchpad---3.17org.jxls---jxls---2.4.3org.jxls---jxls-poi---1.0.14org.jxls---jxls-jexcel---1.0.6itex...原创 2021-05-24 19:31:53 · 323 阅读 · 0 评论 -
springboot项目在Linux环境下,打出的jar包找不到资源文件的问题总结
今天的开发中遇到的一个问题:我在resources目录下的templates下建了一个xml文件。在config类中想读取这个文件, 我使用了如下的代码:File file = ResourceUtils.getFile("classpath:templates/importEXCEL.xml");这种代码在windows下是没有问题的,但是一旦打包到了linux环境下,linux系统在jar包路径上多加了!符号,导致程序按这种路径找文件找不到。改成下面这种写法就可以了:ClassP原创 2021-05-22 18:28:16 · 3104 阅读 · 2 评论 -
docker 安装rabbitmq
拉取rabbitmqdocker search rabbitmqdocker pull rabbitmq启动时指定用户名和密码:docker run -d --name myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 rabbitmq:latest访问:http://ip:host/ -> http://ip:15672/...原创 2021-05-18 19:47:32 · 92 阅读 · 0 评论 -
docker-compose启动tomcat容器
version: "3.1"services: tomcat: #服务名称,不是容器名,只是在文件中方便观看是按个服务 restart: always # 代表只要docker启动, 就会自动启动这个容器 相当于-restart参数 image: tomcat:8.0.52 #依赖的镜像 container_name: docker-compose-tomcat # 容器名称 相当于 --name参数 ports: - 8082:8080 #.原创 2021-05-18 11:29:57 · 1118 阅读 · 0 评论 -
docker 数据卷相关命令
查看数据卷:(查看所有的数据卷)docker volume ls创建数据卷:docker volume create 数据卷名称查看数据卷详细信息:docker volume inspect 数据卷名称删除数据卷:docker volume rm 数据卷名称数据卷挂载容器:docker run -v 数据卷名称:容器内部要挂载的路径 镜像iddocker run -v 宿主机路径:容器内部要挂载的路径 镜像id两个命令都可以实现挂载,挂载后,数据卷路径的文件...原创 2021-05-17 23:27:14 · 300 阅读 · 0 评论 -
docker 创建MySQL容器
从仓库中拉取mysql 镜像,然后启动。命令如下:docker search mysql 先查看一下公共仓库里都有哪些mysql , 一般下星多的和有官方标识的。docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql解释一下: -d 后台运行 -p 指定容器内外映射端口 -e 很重要, 指定MySQL启动时的root用户的登录密码 --name 指定容器名称 然...原创 2021-05-17 22:55:11 · 508 阅读 · 1 评论 -
模板导入导出 excel
公司的一个功能, 提供用户批量导入系统的模板。具体如下:要导入的坐标: <!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version>原创 2021-05-15 16:15:20 · 207 阅读 · 0 评论 -
springboot 全局异常处理
使用ControllerAdvice 和 ExceptionHandler进行全局异常处理ControllerAdvice只对Controller层抛出的异常进行处理, 如果Service层抛出了异常,不被try-catch,直接向上抛出的会到Contrller层,进而被捕获。如果Controller层try-catch了异常,那么不会被统一异常拦截处理。代码如下:import org.springframework.web.bind.annotation.ControllerAdvic原创 2021-04-14 19:23:26 · 389 阅读 · 0 评论 -
mybatis-pluse快速使用 springboot
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency>随便写一个modelimpo...原创 2021-04-12 18:29:19 · 136 阅读 · 0 评论 -
sql 优化 具体案例分析-基于pgsql数据库
我们来对sql是否使用索引来进行分析, 要用到的sql语句如下:explain (ANALYZE on ,TIMING on, VERBOSE on, BUFFERS on, COSTS on ) select cons_name from c_cons where cons_name like '45%'explain (ANALYZE on ,TIMING on, VERBOSE on, BUFFERS on, COSTS on ) select * from e_mp_day_read wh原创 2021-04-02 16:48:30 · 685 阅读 · 0 评论 -
使用EXPLAIN (postgresql) 对sql进行优化
现在sql优化有两种方向,一种是通过增加缓存的方式,比如通过使用redis , mybites 一二级缓存来提高查询效率。 第二种是通过使用explain来分析慢查询的sql语句, 找到该语句的问题从而进行优化。这里对使用explain来进行优化的方式做一些介绍。使用方式: explain + sql => 执行 => 查看结果使用explain会打印出来数据库引擎在底层执行sql语句是具体是怎么做的。举个例子:使用explain对这条sql语句进行具体的分析。e...原创 2021-03-31 17:15:14 · 1465 阅读 · 0 评论 -
XXL-JOB 任务
XXL-JOB 由调度中心,执行器, 任务组成。执行器中存放若干任务,具体执行哪些任务由执行器决定。调度中心实现对执行器的调度。原创 2021-03-31 11:55:38 · 1337 阅读 · 0 评论