-
MySQL升级
最近把网站的文章编辑器换了,不使用UEditor,而直接编写Markdown文本。因为之前可以直接使用UEditor的表情,但是现在只能使用Emoji表情了,但是以前旧版本的MySQL不支持`utf8mb4`编码,所以这次升级了MySQL5.7。具体升级我命令就不写了,大概流程:1.备份数据2.删除旧版本3.安装新版本4.还原数据我使用`mysqldump`对数据进行备份和还原。但是重启后发现还是不支持Emoji标签,`my.cnf`和数据库都已经设置了`utf8mb4`。后来发现原来备份还原的时候,**数据库表和列的编码都还是`utf8`**,需要全部修改一遍,下面是SQL:```sqlALTERTABLEtableDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;ALTERTABLEtableMODIFYCOLUMNcolumnVARCHAR(512)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciDEFAULTNULLCOMMENT'内容';```
MySQL -
CSS让图片自适应
我们使用了响应式的页面后,发现图片不能自动缩放。开始我是用的是`width:100%`来设置,但是发现一个问题就是,如果图片宽度不一致时,有些图片会被拉伸。后来我改用`max-width:100%`,就比较完美的解决了。
CSS 自适应 -
Spring Boot注入
SpringBoot使用`@Autowired`注入时,使用类型匹配,然后使用名称匹配。如果接口和实现都被扫描时,命名一定要注意(注意变量名称变化):```javapublicinterfaceDemo{voiddemo();}@ServicepublicclassDemoImplimplementsDemo{@Overridepublicvoiddemo(){}}//注入成功@AutowiredprivateDemodemo;@AutowiredprivateDemodemoImpl;@Autowired@Qualifier(value="demo")privateDemodemoEx;@Autowired@Qualifier(value="demoImpl")privateDemodemoEx;//注入失败@AutowiredprivateDemodemoEx;//异常requiredasinglebean,but2werefound:Considermarkingoneofthebeansas@Primary,updatingtheconsumertoacceptmultiplebeans,orusin...
Spring Boot -
log4j logstash日志收集
使用默认的log4j的`SocketAppender`,直接序列化`LoggingEvent`,所以格式很难看。这里我自己实现了一个Appender:[https://gitee.com/acgist/demo/blob/master/acgist-share/2019/LogstashAppender.java](https://gitee.com/acgist/demo/blob/master/acgist-share/2019/LogstashAppender.java),代码如下:```javapackagecom.acgist.demo;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.net.StandardSocketOptions;importjava.nio.ByteBuffer;importjava.nio.channels.SocketChannel;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedB...
log4j logstash 多行日志 multiline json -
ELK简单权限配置
前面的文章写了搭建ELK环境,但是没有配置相关的安全策略。我们安装后授权是基础版,也是有权限控制这个模块,只不过基础版,默认是关闭的,需要我们自己打开并且配置。基础版和其他版本功能对比:[https://www.elastic.co/cn/subscriptions](https://www.elastic.co/cn/subscriptions)整体思路就是:所有的端口使用防火墙拦截,特殊功能设置为内网IP可以访问,然后使用Nginx反向代理kibana。接下来我们打开elasticsearch的安全验证,参考文章:[https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html)```#vielasticsearch.ymlxpack.security.enabled:truexpack.security.transport.ssl.ena...
ELK 权限 -
Linux搭建ELK
**这是一个失败的例子,CentOS6.x用不了ELK7.x,没有使用CentOS7.x测试**。**换为ELK6.8.0后,使用CentOS6.10,可以使用,配置基本一致**。创建目录:`/opt/elk`下载软件:`elasticsearch-7.2.0-linux-x86_64.tar.gz`、`kibana-7.2.0-linux-x86_64.tar.gz`、`logstash-7.2.0.tar.gz`、`openjdk-11.0.2_linux-x64_bin.tar.gz`##elasticsearch解压elasticsearch执行启动命令:```bash#添加参数-d可以后台执行./elasticsearch```可能遇到下列错误:```org.elasticsearch.bootstrap.StartupException:java.lang.RuntimeException:cannotrunelasticsearchasroot```提示我们需要使用其他用户来启动,我们创建用户:```bash#创建用户useraddelkpasswdelk#授权chown-Relk:elk/op...
Linux ELK 日志 -
Python2.6提示缺少site模块
rpm安装Python2.6后,发现提示`Nomodulenamedsite`,在环境变量添加:```#路径查找:find/-namesite.pyexportPYTHONHOME=/usr/lib64/python2.6exportPYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6#重新加载./etc/profile```Done
Python -
CentOS7更新内核错误
之前发现阿里云的`CentOS6`禁止了内核更新,今天发现一个更加奇怪的问题,`CentOS7`也不能更新内核。使用命令查询:```bashuname-ayumlistkernel```发现能够发现新的内核。但是执行下面命令更新不了:```bashyumupdatekernel```然后查询已安装内核,发现最新的内核已经安装了:```bashrpm-qkernel```然后执行下面命令,查询启动配置:```bashawk-F\''$1=="menuentry"{printi++":"$2}'/etc/grub2.cfg```执行下面命令重新生成启动配置:```bashgrub2-mkconfig--output=/boot/grub2/grub.cfg```查看当前启动内核:```bashgrub2-editenvlist```设置新的启动内核:```bashgrub2-set-default"CentOSLinux(3.10.0-957...
CentOS7 -
CentOS yum不能升级内核
阿里云后台发现很多的漏洞,需要升级内核,但是使用`yum`居然升级不了。后来发现旧版的阿里云服务器`yum.conf`里面忽略了内核升级:```exclude=*.i?86kernelkernel-xenkernel-debug```把后面的`kernel*`删除就可以升级了。阿里云的源地址:[http://mirrors.aliyun.com/repo/](http://mirrors.aliyun.com/repo/)阿里云CentOS镜像:[https://mirrors.aliyun.com/centos/](https://mirrors.aliyun.com/centos/)
CentOS yum -
Java实现Windows删除文件到回收站
Java默认提供的文件删除方法是不支持删除后放到回收站的,所以自己实现了这个功能。我这里测试用的Win10,Win7没有测试。回收站其实就是一个操作系统文件,我们可以在查看中将其显示出来:或者直接使用Chrome浏览器查看:箭头所指就是回收站的路径,这里面有几个文件夹,对应多个用户。红色框里面的就是对应一个删除的文件,`$I`开头的就是删除文件信息,`$R`开头的就是原始文件。目录也是一样的道理。删除文件信息里面记录了删除文件的原始文件路径,删除时间等信息,使用小端模式,如下图:第一个方框:删除...
Java Windows 回收站 recycle -
从零开始到下载世界
这个是一个BT下载项目,项目地址:[https://gitee.com/acgist/snail](https://gitee.com/acgist/snail)项目主要支持的下载:BT、FTP、M3U8、HTTP。最初考虑过做ED2K的,但是最终还是没有做。主要是因为资料比较少,使用的人也不多。把其他的做到极致就可以了,现在使用基本没有问题了,以后需要继续优化。这将会是一个系列的文章,里面讲述一些开发遇到的问题和心得,当然主要是关于BT下载的,其他信息我这里不会详细展开。>你看这系列文章时需要有一定的编程基础[从零开始到下载世界:BT入门](https://www.acgist.com/article/942.html)[从零开始到下载世界:Tracker服务器和DHT网络](https://www.acgist.com/article/945.html)[从零开始到下载世界:种子文件](https://www.acgist.com/article/944.html)
Java BitTorrent Snail -
微信打开链接提示错误
今天微信打开一个链接是提示:```该地址含有无法正确解析的链接格式,请确认是否继续访问。```这个提示开始一头蒙逼,开始我还以为是地址太长,但是后来发现并不是这个问题。于是乎我就一段一段的删除发现,原来链接里面出现了`javascript`这个关键字,例如:`https://www.acgist.com/?w=javascript`还有一个问题就是如果出现了`localhost`关键字,那么页面打开是空白的,例如:`https://www.acgist.com/?w=localhost`
微信 -
Linux运行JavaFX程序
Windows上面直接使用Maven的依赖就可以直接运行,但是Linux上面却不行。下载JavaFX运行环境:[https://gluonhq.com/products/javafx/](https://gluonhq.com/products/javafx/)配置环境变量:```exportJAVAFX=/home/javafx-sdk-11.0.2/lib```运行启动命令:```java--module-path$JAVAFX--add-modulesjavafx.fxml,javafx.controls-jarsnail.jar```>参考文章:[https://openjfx.io/openjfx-docs/#install-javafx](https://openjfx.io/openjfx-docs/#install-javafx)后来我发现了一个更好的解决方案,就是`pom.xml`的配置也可以解决。在Window上面只需要配置`fxml/controls`就可以了,其他的会自动引入:```xmlorg.openjfxjavafx-fxml${javafx.version}${os.na...
Linux JavaFX -
通过UPNP实现内网端口映射
最近在写一个下载软件,HTTP和FTP实现起来比较简单,通过JDK自带的包就能实现。但是P2P的下载实现起来确实比较麻烦,要实现的东西比较多。由于P2P需要本机的端口被外网访问,所以这里就需要用到这个端口映射的技术。首先我们需要使用`M-SEARCH`来扫描内网里面的设备和服务。`M-SEARCH`这个是`SSDP`协议里面的一个请求方法,使用的是`HTTPU`协议,其实和`HTTP`协议很像,只不过是用的`UDP`实现的一个多播请求,只有请求头,没有`body`:```M-SEARCH*HTTP/1.1HOST:239.255.255.250:1900MX:2ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1MAN:"ssdp:discover"```上面的请求头除了`MX`都是固定的。然后就能收到一个响应,响应头里面有个`location`,访问这个地址获取一个`XML`。然后找到`urn:schemas-upnp-org:service:WANIPConnection:1`这个服务,访问对应的`SCPDURL`,可以得到类似WebService里...
UPNP SSDP -
MFC设置软件详细信息
右键查看默认生成的`exe`详细信息时,里面是没有任何信息的,那么启动后我们在资源管理器里面看到的信息就是`xxxx.exe`。怎么设置这个信息呢,其实非常简单,我们在`VS`里面添加资源,选择最后的`Version`里面就可以编辑生成的`exe`的信息了。
MFC -
Java B编码解析
最近在做一个下载软件,研究了一下Torrent文件的解析,这个主要使用的就是B编码,下面就是解析代码:```javapackagecom.acgist.snail.system.bencode;importjava.io.ByteArrayInputStream;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.acgist.snail.system.config.SystemConfig;importcom.acgist.snail.system.exception.ArgumentException;importcom.acgist.snail.system.exception.PacketSizeException;importcom.acgist.snail.utils...
Java B编码 种子解析 -
logback启动日志不能关闭
使用logback设置了`debug=false`,但是依旧在控制台有一段logback本身的日志信息输出:```15:03:22,532|-INFOinch.qos.logback.classic.LoggerContext[Snail]-CouldNOTfindresource[logback-test.xml]15:03:22,533|-INFOinch.qos.logback.classic.LoggerContext[Snail]-CouldNOTfindresource[logback.groovy]15:03:22,534|-INFOinch.qos.logback.classic.LoggerContext[Snail]-Foundresource[logback.xml]at[file:/E:/GITEE/snail/target/classes/logback.xml]15:03:22,610|-INFOinch.qos.logback.classic.joran.action.ConfigurationAction-debugattributenotset15:03:22,612|-IN...
logback -
JavaFX隐藏托盘后不能再次显示
用JavaFX写了个桌面应用,发现隐藏到托盘后不能最大化了,后来发现少了这句:```javaPlatform.setImplicitExit(false);```如果少了这个,那么缩小到托盘后默认是退出了JavaFX平台了,所以要设置这个。
Java JavaFX -
Java读取Torrent文件信息
Torrent文件其实是特殊编码格式的文件,代码包含读取文件信息:名称、大小、发布者、Tracker等。代码地址:[https://gitee.com/acgist/snail](https://gitee.com/acgist/snail)测试代码:[https://gitee.com/acgist/snail/blob/master/snail/src/test/java/com/acgist/snail/pojo/bean/TorrentTest.java](https://gitee.com/acgist/snail/blob/master/snail/src/test/java/com/acgist/snail/pojo/bean/TorrentTest.java)
Java Torrent 种子文件 -
JavaFX TreeView异常
```3月01,201911:42:26上午javafx.scene.CssStyleHelpercalculateValue警告:Couldnotresolve'-fx-text-background-color'whileresolvinglookupsfor'-fx-text-fill'fromrule'*.check-box'instylesheetjar:file:///C:/Users/28954/.m2/repository/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-win.jar!/com/sun/javafx/scene/control/skin/modena/modena.bss3月01,201911:42:26上午javafx.scene.CssStyleHelpercalculateValue警告:Couldnotresolve'-fx-text-background-color'whileresolvinglookupsfor'-fx-text-fill'fromrule'*.check-box'instyle...
JavaFX