- 博客(378)
- 收藏
- 关注
原创 接口返回中文乱码问题
如果下载的文件,文件头中有文件名称,浏览器下载正常,接口下载乱码,也同样也需要解码ISO-8859-1后,再编码UTF8,即能正常显示。服务方返回的content-type:application/json 中没有字符集,导致使用了默认的ISO-8859-1字符集。在接口添加produces。
2023-05-07 21:05:59
2578
原创 restTemplate 上传大文件Java heap space
将已上传的文件,通过RestTemplate,发起HTTP请求调用接口。当文件较大时,出现Java heap space。
2022-12-08 22:11:59
2022
1
原创 xlrd.biffh.XLRDError: Excel xlsx file; not support
解析一个xlsx文件,提示xlrd.biffh.XLRDError: Excel xlsx file;
2022-11-30 20:07:09
380
原创 java.lang.ClassCastException: java.util.LinkedHasMap cannot be cast to xx
背景:bean中定义了json的List对象属性。获取此list进行Stream操作时提示标题中报错。原因:list中对象被转换成了LinkedHasMap,如果强制转换编译可以过,但执行也会报错。
2022-08-30 22:08:22
338
原创 spring bean线程安全问题
类中声明成员变量,并且有读写操作:线程是不安全的。默认由spring注入的类,是单例的。类中文中局部变量:线程是安全的。
2022-08-30 21:50:32
201
原创 java 下载交于nginx
背景java提供接口,进行鉴权。鉴权成功后将下载指向nginx,收nginx进行下载代理。直接访问nginx不能下载,只能走重定向下载。
2022-07-19 22:55:09
668
原创 list<Map> 数据处理
问题:List toString后,原:会被替换成=解决:先转Json再toString解决List<Map> resultMap = new ArrayList<>();JSONArray jsonArray = (JSONArray)JSON.toJSON(resultMap)问题:JSONArray toString后null值被忽略,不会打印解决:指定JSONObject的toSringJSONObject.toJSONString(jsonArray, Ser
2022-05-29 22:23:23
366
1
原创 多个微服务相互引用报错找不到对应类
多个微服务相互引用本地可运行,但打包时报错找不到对应类。这是因为引用了可运行的jar包。解决办法1,将公共类单独提到一个模块中,可运行的jar包不要直接引用。解决办法2,打包时其实会生成两个jar包,一个可运行的jar包,一个可引用的jar包,默认是重名,所以覆盖了。此时将可执行换个名称后,原引用的服务就不会报错。同时执行的时候,执行重新名称的执行jar包。pom中<plugins> <plugin> <groupId>org.springframewor
2022-05-29 22:15:01
1261
原创 多个微服务相互引用报错找不到对应类
多个微服务相互引用本地可运行,但打包时报错找不到对应类。这是因为引用了可运行的jar包。解决办法1,将公共类单独提到一个模块中,可运行的jar包不要直接引用。
2022-04-28 21:39:04
570
原创 pm2 部署nuxt
下载node文件包。解压后进入目录,手动确认版本。[root@localhost bin]# ./node -vv16.14.2生成软链接[root@localhost opt]# ln -s /opt/node-v16.14.2-linux-x64/bin/node /usr/local/bin/node[root@localhost opt]# node -vv16.14.2[root@localhost opt]# ln -s /opt/node-v16.14.2-linu.
2022-03-28 21:48:28
1198
原创 Mybatis-Plus 使用
简介SpringBoot、Mysql、Mybatis-Plus创建表Mysql创建表CREATE TABLE user( id char(19) NOT NULL COMMENT '主键ID', name VARCHAR2(32) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT
2022-02-27 21:47:00
670
原创 python 限制同一时间只执行一个
需求脚本可能被多个应用调用,但要求同一时间此脚本只有一个在执行。思路脚本执行时,先判定有没有pid文件。(pid文件是脚本执行时,生成的文件并写入其pid值)有pid文件的同时,获取pid文件中的pid,检测进程是否存在。(防止脚本意外停止,但没有删除pid文件)。脚本执行完后,删除pid文件。import osimport sysimport timeimport logging, logging.handlersimport psutillogger = logging.ge
2022-01-22 11:17:07
1700
原创 RestClient操作索引库
简介ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。java就是RestClienteg:利用JavaRestClient实现创建,删除索引,判断索引库是否存在。分析数据结构mapping要考虑的问题:字段名、数据类型、是否参与搜索、是否分词、如果分词,分词器是什么注:像id数据库中可能是Long但分词时是指定为keyword。一般城市、价格、评分这一类字段不需要分词。对于不需要搜索的字段设置index为false。
2021-12-19 21:15:58
1979
原创 文档的操作
新增POST /索引库名/_doc/文档id{ "字段1": "值1", "字段2": "值2", "字段3": { "子属性1": "值3", "子属性2": "值4" }, //略}eg:POST /yy/_doc/1{ "info": "张三的老铁学习java!", "email": "zhangsan@gamail.com", "name": { "firstName": "三", "lastName": "张" }}返回
2021-12-19 10:52:06
572
原创 索引库操作
mapping属性mapping是对索引库中文档的约束,常见的mapping属性包含:type:字段数据类型,常见的简单类型有- 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)- 数值:long、integer、short、byte、double、float- 布尔:boolean- 日期:date- 对象:object (嵌套类)index:是否创建索引,默认为true (true就可以搜索)analyzer:使用哪种分词器(与text结合使用
2021-12-19 10:24:39
213
原创 ES 分词器
分词器:ES在创建倒排索引时需要对文档分词。在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。在kibana的DevTools中测试:POST /_analyze{"analyzer": "standard","text": "张三老铁学习java!"}post代表请求方式。/_analyze代表分词分析。analyzer分词类型,这里是默认的standard分词器。text要分词的内容。中文都直接被拆分成了一个个汉字,所以不能此分词器,要用lk分词器。
2021-12-18 14:37:10
8703
原创 elasticsearch 简介与安装
简介elasticsearch结合kibana、Logstash、Beast,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。数据抓取:Logstash、Beasts存储、计算、搜索数据:Elasticsearch(底层是Lucene)数据可视化:KibanaLucene:是一个java语言的搜索引擎类库。正向索引和倒排索引传统数据库采用正向索引,例如给表的ID创建索引。elasticsearch采用倒排索引:文档(doucument):每条数据就是
2021-12-18 11:18:30
2619
原创 SpringAMQP 消息转换器
说明:在SpringAMQP的发送中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化为字节后发送。ctrl+p,查看ConvertAndSend方法中的类型,发现都是Object。测试:在之前的配置类中声明一个队列object.queuepackage com.yy.comsumer.config;import org.springframework.amqp.core.Binding;import org.springframew
2021-12-17 21:28:18
1011
原创 发布订阅模式
前面的简单队列案例、work queue案例中一条消息只能有一个消费者,消费后就会删除。发布订阅模式与之前案例的区别就是允许将同一消息发送给多个消费者。实现方式是加入exchange(交换机)。之前消息是发送直接到达队列,现在是先发给exchange。再由exchange转发给队列。常见exchange类型包括:Fanout:广播Direct:路由Topic:话题注意:exchage负责消息路由,而不是存储,路由失败则消息丢失。FanoutFanout Exchange会将接收到的消息路由
2021-12-16 21:50:07
589
原创 Work Queue
接上一篇测试在publisher服务定义测试方法,每秒产生50条消息,发送到simple.queue。在consumer服务中定义两个消息监听者,都监听simple.queue队列。消费者1每秒处理50条消息,消费者2每秒处理10条消息。创建生产者package com.yy.spring;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.amqp.rabbit.core.R
2021-12-15 21:24:23
677
原创 SpringAMQP 搭建使用
RabbitMQchannel:操作MQ的工具exchange:路由消息到队列中queue:缓存消息virtual hos:虚拟主机,是对queue、exchange等资源的逻辑分组基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列(生产者与消费者都需要声明队列,是防止队列不存在,重复声明不会影响)定义
2021-12-12 13:42:41
1462
原创 DockerCompose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。安装curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose自助补全curl -L https
2021-12-12 09:49:35
198
原创 Gateway 跨域问题处理
跨域:域名不一致就是跨域。域名不同域名相同,端口不同跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题解决方案:CORS网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:spring: cloud: gateway: globalcors: # 全局的跨域处理 add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题,CORS 浏览器到服务器询
2021-12-05 19:38:06
343
原创 GatewayFilter
网关过滤器GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。GatewayFilter Factories有30几个。eg:给所有进入userservice的请求添加一个请求头:Truth=NO.1实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器。server: port: 10010 #网关端口spring: application: name: geteway #服务
2021-12-05 19:26:56
2647
原创 统一网关Gateway
网关功能微服务内部使用Feign调用,但对外需要一个网关,作为入口。身份认证和权限校验。服务路由、负载均衡。请求限流。SpringCloud有网关的实现包含两种gatewayzuulZuul是基于Servlet的实现,属于阻塞式编程。SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。搭建网关服务的步骤创建module,创建启动类package com.yy.gateway;import org.sp
2021-12-05 15:35:39
306
原创 Feign 优化
连接优化Feign底层的客户端实现:URLConnection:默认实现,不支持连接池Apache HttpClient:支持连接池OKHttp:支持连接池优化方向:使用连接池代替默认的URLConncetion日志级别,最好用baseic或none连接池配置引入依赖<!-- httpclient的依赖--> <dependency> <groupId>io.github.openfei
2021-12-05 14:03:38
776
原创 Feign 自定义日志配置
feign.Logger.Level修改日志级别,包含4个不同级别,NONE,BASE,HEADERS,FULL1. 基于配置文件ymlfeign: client: config: default: #这里default就是全局配置,如果是写服务名称,则是针对某个微服务的配置 LoggerLevel: FULLlogging: level: com.yy: debug #com.yy为对应基础包名 pattern: dateformat
2021-12-05 10:00:39
1327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人