-
FFmpeg学习
##FFmpeg安装```#nasmwgethttps://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gztarzxvfnasm-2.14.tar.gzcdnasm-2.14./configure--prefix=/usr/local/nasmmake-j&&makeinstall#环境变量vim/etc/profileexportPATH=$PATH:/usr/local/nasm/binsource/etc/profile#yasmwgethttp://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gztarzxvfyasm-1.3.0.tar.gzcdyasm-1.3.0./configure--prefix=/usr/local/yasmmake-j&&makeinstall#环境变量vim/etc/profileexportPATH=$PATH:/usr/local/yasm/binsource/etc/profile#x264gitclon...
FFmpeg -
ES重建索引
今天发现ES索引建错了,很难受记录一下重建过程:```#查看索引结构curlhttp://elastic:elastic@localhost:9200/index_log#新建临时索引curl-XPUThttp://elastic:elastic@localhost:9200/index_log_back#拷贝临时索引curl-XPOST-H"Content-Type:application/json"http://elastic:elastic@localhost:9200/_reindex-d'{"source":{"index":"index_log"},"dest":{"index":"index_log_back"}}'#查询索引状态curlhttp://elastic:elastic@localhost:9200/_cat/indices#删除旧的索引curl-XDELETEhttp://elastic:elastic@localhost:9200/index_log#重启应用建立索引#还原数据curl-XPOST-H"Content-Type:application/json"http://el...
ES -
Linux时间错误
一般情况Linux联网都会通过`ntp`服务自动同步时间,但是最近的机器大部分都是离线系统,导致时间错乱。一开始以为是`coms`电池没电了,后来发现原来就是硬件时间错了,所以我们直接修改硬件时间即可:```#设置系统时间date-s'2022111111:11:11'#查看硬件时间hwclock--show#硬件时间同步系统时间hwclock--systohc#系统时间同步硬件时间hwclock--hctosys```
Linux -
MyBatisPlus解决SQLServer分页问题
最近有个项目需要迁移`SQLServer`,原来使用的`MySQL`,发现有些`SQL`有些问题,特别是分页统计条数。原来使用`MySQL`时子查询里面可以含有`orderby`,但是`SQLServer`不行,提示:```org.springframework.jdbc.UncategorizedSQLException:###Errorqueryingdatabase.Cause:com.microsoft.sqlserver.jdbc.SQLServerException:TheORDERBYclauseisinvalidinviews,inlinefunctions,derivedtables,subqueries,andcommontableexpressions,unlessTOP,OFFSETorFORXMLisalsospecified.```其实默认`MyBatisPlus`是解决了这个问题的,简单语句会去掉排序,复杂语句通过`TOP100PERCENT`解决了,但是还是存在部分有问题。如果语句之中别名存在关键字时就会导致解析不了`SQL`,最好的解决方法就是修改别名。也可以通过将排序字段设...
MyBatisPlus SQLServer -
DBeaver优化
以前一直用的`Navicat`,现在不能用了,改用`DBeaver`了,然后调整了一些设置比较方便。##自动生成别名```首选项->编辑器->SQL编辑器->代码补全->插入表的别名```
DBeaver -
微信公众号获取消息换行问题
今天仔细看了一下微信公众号收到的消息,发现换行符不见了,后来仔细排查了一下才发现自己写的BUG:```//错误代码finalStringBuilderbuilder=newStringBuilder();try(finalBufferedReaderreader=newBufferedReader(newInputStreamReader(request.getInputStream()));){Stringline=null;while((line=reader.readLine())!=null){//注意添加换行builder.append(line);}}```看到没有,`readLine`然后没有拼接换行符所以导致丢失了,改为`builder.append("\r\n").append(line);`即可。
微信公众号 -
SpringBoot获取WebSocket IP地址
在`SpringBoot`中通过`RequestContextHolder.getRequestAttributes()`获取不到`WebSocket`的`request`请求,所以获取客户端真实IP地址需要通过下面这种方法:```/***WebSocket配置器**@authoracgist*/@Slf4jpublicclassWebSocketConfiguratorextendsServerEndpointConfig.Configurator{publicstaticfinalStringCLIENT_IP="CLIENT_IP";@OverridepublicvoidmodifyHandshake(ServerEndpointConfigconfig,HandshakeRequestrequest,HandshakeResponseresponse){StringclientIP=null;Listlist=null;finalMap>headers=request.getHeaders();log.debug("WebSocket头部:{}",headers);if(CollectionUt...
SpringBoot WebSocket IP -
SpringCloud OAuth2国际化失效的问题
这里使用旧的OAuth2模块:```org.springframework.cloudspring-cloud-starter-oauth2```现在需要自定义一个授权`grunt_type`,实现两个组件即可`AuthenticationProvider`和`AbstractTokenGranter`。##白名单通过帐号直接授权Token```@Slf4jpublicclassMobileAuthenticationProviderimplementsAuthenticationProvider{@AutowiredprivateWhiteIPPropertieswhiteIPProperties;@AutowiredprivateUserDetailsServiceuserDetailsService;@OverridepublicAuthenticationauthenticate(Authenticationauthentication)throwsAuthenticationException{finalMobileTokentoken=(MobileToken)authentication;fin...
SpringCloud OAuth2 -
FFmpeg命令
##MKV转MP4```#很慢/usr/local/ffmpeg/bin/ffmpeg-isource.mkv-vcodech264target.mp4/usr/local/ffmpeg/bin/ffmpeg-isource.mkv-ccopytarget.mp4#音频/usr/local/ffmpeg/bin/ffmpeg-isource.mkv-vcodeccopy-acodecaactarget.mp4```>-y默认覆盖由于录制媒体流时直接使用`-ccopy`所以导致数据之中很多的重传的错包,所以需要有些特殊处理。```Toomanypacketsbufferedforoutputstream0:1.[aac@0x24a2100]Qavg:61578.551[aac@0x24a2100]2framesleftinthequeueonclosingConversionfailed!```添加参数`-threads2`和`max_muxing_queue_size1024````ffmpeg-threads2-i000000.ts-max_muxing_queue_size1024-c:aaac-c...
FFmpeg -
ITextPdf
##Maven```com.itextpdfitextpdf${itextpdf.version}com.itextpdfitext-pdfa${itextpdf.version}com.itextpdfitext-xtra${itextpdf.version}org.apache.commonscommons-imaging1.0-alpha3```##添加附件```finalPdfFileSpecificationpdfFileSpecification=PdfFileSpecification.fileEmbedded(pdfWriter,filePath.toFile().getAbsolutePath(),title,null);//中文乱码pdfFileSpecification.setUnicodeFileName(title,true);pdfWriter.addFileAttachment(pdfFileSpecification);```##添加视频```finalPdfFileSpecificationpdfFileSpecification=PdfFileSpecification.f...
ITextPdf -
使用commons-net中的FTPClient总结
以前没有仔细研究还有测试,最近偶然升级了`commons-net`包后发现居然不能连接不上FTP,然后经过多方测试发现几个问题。##命令分隔`2.2`命令换行用的是`\n`,之后`3.0`改用了`CRLFLineReader`,使用的是`\r\n`,所有部分FTPServer会出现登陆不上问题。##超时问题```ftp.setDataTimeout(5000);ftp.setDefaultTimeout(5000);ftp.setConnectTimeout(5000);```超时时间必须设置,否者将会永久阻塞。
commons-net FTPClient -
keytool命令
##相关命令```#生成CA根证书jkskeytool-genkeypair-keyalgRSA-dname"CN=ca.acgist.com,OU=acgist,O=acgist,L=GZ,ST=GD,C=CN"-aliasca-validity3650-extbc:c-keystoreca.jks-keypass123456-storepass123456#导出ca证书keytool-exportcert-keystoreca.jks-storepass123456-aliasca-rfc-fileca.cer#生成server证书keytool-genkeypair-keyalgRSA-dname"CN=www.acgist.com,OU=acgist,O=acgist,L=GZ,ST=GD,C=CN"-aliasserver-validity3650-extku:c=dig,keyE-exteku=serverAuth-extSAN=dns:www.acgist.com,ip:127.0.0.1-keystoreserver.jks-keypass123456-storepass123456#生成se...
keytool 证书 -
Neo4j插入内存溢出
默认使用如下查询:```PortNodefindByPortId(LongportId);```但是录入一定数量就开始内存溢出了,开始找了很久没有找到原因。后来看了`debug`日志才发现,原来这个查询会级联查询所有关系,成环的关系就会导致内存溢出。旧版的`API`存在`@Depth`注解可以指定查询的深度,但是新版的没有这个注解了,所以只能改成下面这样:```@Query("MATCH(a:PortNode{portId:$portId})-[r:PortRelationship]-(z:PortNode)RETURNa,COLLECT(r),COLLECT(z)")PortNodefindByPortId(LongportId);```然后这里还有一个问题,就是`save`的时候,后面的节点关系会丢失,所以最后我改成了使用语句插入关系:```@Query("MATCH(a:PortNode{portId:$aPortId})WITHa"+"MATCH(z:PortNode{portId:$zPortId})"+"CREATE(a)-[r:PortRelationship]->(z)")```如果不要...
Neo4j java.lang.OutOfMemoryError -
记录一次SpringMVC请求一次返回两次数据错误
昨天改了很多代码,最后发现发送一次请求,返回数据的时候居然返回了两份。最后DEBUG看了下堆栈信息发现,原来是过滤器执行了两次`doFilter`:```if(LOGIN_MATCHER.matches(request)){filterChain.doFilter(request,response);}elseif(MATCHER.matches(request)){}filterChain.doFilter(request,response);```改为下面这样就没问题了:```if(LOGIN_MATCHER.matches(request)){filterChain.doFilter(request,response);}elseif(MATCHER.matches(request)){}else{filterChain.doFilter(request,response);}```这个问题真的粗心,而且很难发现问题。
SpringMVC -
SpringBoot多数据库事务管理
如果SpringBoot同时加入多个数据源,不能正确获取事务管理器,可以使用下面方法处理:```/***配置事务**配置JDBC事务事务为默认的事务,Neo4j事务需要手动指定`@Transactional(transactionManager="neo4jTransactionManager")`。**@authoracgist*/@Configuration(proxyBeanMethods=false)@Import({DataSourceAutoConfiguration.class,MybatisPlusAutoConfiguration.class})//@Import({DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class,MybatisPlusAutoConfiguration.class})publicclassTransactionConfiguration{@Bean("transactionManager")@PrimarypublicDataSourceTransac...
SpringBoot TransactionManager -
SpringBoot配置转义
SpringBoot配置冒号等等转义:```acgist:cache:"[password::fail]":1```还有一个问题就是值里面如果出现`${value:default}`这种字符串,默认会被当成表达式处理掉,如果没有定义`value`配置,就会变成默认值`default`,这个时候我们就需要这样配置:```value:${$:$}{value:default}```
SpringBoot -
使用Canal + Kafka + ElasticSearch记录数据库修改历史
最近有个需求需要记录某些数据库表里面的新增修改和删除日志。开始本来想直接通过注解方式实现,但是后来看了看,实现起来比较麻烦。主要是批量修改的时候很难记录日志。所以想到使用`Canal`来监听MySQL的`binlog`,然后发送修改到Kafka,然后入库到ElasticSearch。DEMO地址:[https://gitee.com/acgist/muses/tree/master/service-parent/service-log-parent](https://gitee.com/acgist/muses/tree/master/service-parent/service-log-parent)##异常```2022-10-2716:08:58.068[destination=acgist,address=/192.168.8.187:3306,EventParser]ERRORc.a.o.canal.parse.inbound.mysql.dbsync.DirectLogFetcher-I/Oerrorwhilereadingfromclientsocketjava.io.IOException:R...
canal kafka ElasticSearch -
SpringBoot OAuth2出现401问题
最近公司要求配置一个超级管理员,不需要配置角色和权限,天然拥有所有权限。所有代码改完,返现系统认证的时候老返回`401`,后来发现原来`UserDetailsService`返回的用户信息如果没有角色,那么默认就会返回`401`了,所以给他加个角色就可以了。
SpringBoot OAuth2 401 -
Neo4j常用查询语句整理
```//忽略属性@Query("MATCHp=(a:RoomNode{roomId:$roomIdA})-[*..16]-(z:RoomNode{roomId:$roomIdZ})RETURNp,LENGTH(p)")//指定属性@Query("MATCHp=(a:RoomNode{roomId:$roomIdA})-[r:RoomRelationship*..16]-(z:RoomNode{roomId:$roomIdZ})RETURNp,LENGTH(p)")//最短路径@Query("MATCH(a:RoomNode{roomId:$roomIdA}),(z:RoomNode{roomId:$roomIdZ}),p=SHORTESTPATH((a)-[*..16]-(z))RETURNp,LENGTH(p)")//多条最短路径@Query("MATCH(a:RoomNode{roomId:$roomIdA}),(z:RoomNode{roomId:$roomIdZ}),p=ALLSHORTESTPATHS((a)-[*..16]-(z))RETURNp,LENGTH(p)")//必经避让@Query(...
Neo4j Cypher -
SpringCloud配置OAuth2权限
配置SpringCloud环境OAuth2权限问题:*配置Feign调用Token*配置内网IP允许直接访问```importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.lang3.ArrayUtils;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.autoconfigure.condition.ConditionalOnClass;importorg.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;importorg.springframework.context.annotation.Bean;...
SpringCloud