-
JavaFX隐藏滚动条
JavaFX通过CSS影藏滚动条代码```css/*垂直滚动条*//*.main.table-view.virtual-flow.scroll-bar:vertical{-fx-pref-width:0;}*//*水平滚动条*/.main.table-view.virtual-flow.scroll-bar:horizontal{/*关闭滚动条*/-fx-pref-height:0;}.main.table-view.virtual-flow.scroll-bar:horizontal.increment-button.increment-arrow{/*影藏箭头*/-fx-background-color:transparent;}.main.table-view.virtual-flow.scroll-bar:horizontal.decrement-button.decrement-arrow{/*影藏箭头*/-fx-background-color:transparent;}```**注意:垂直滚动条设置`-fx-pref-width`、水平滚动条设置`-fx-pref-height`**
JavaFX 滚动条 -
Travis CI编译卡住
今天使用了一下TravisCI,但是发现编译时卡住不动然后失败了。开始我以为以为gpg签名导致的,添加`-Dgpg.skip=true`发现并没有解决。后来发现打包时需要拷贝两个资源文件配置的路径是`/`,猜想可能是这个问题导致的,改为`./`编译成功。`/`改为`./`pom.xml:```xmlorg.apache.maven.pluginsmaven-resources-plugin${maven.resources.version}src/main/resourcesfalse**profiles/**./falseMETA-INF/LICENSEREADME.mdauto-copy-resources-profilescompilecopy-resourcestrue${project.build.outputDirectory}src/main/resources/profiles/${package.environment}false```
TravisCI Java Github -
Java CPU占用过高
今天发现一个奇怪的问题,发现运行一个Java程序时CPU占用超过了50%。在公司测试并没有这个问题,而且家里电脑配置比公司更好,理论上不应该出现这个问题。后来发现这个问题的原因是没有配置JVM参数:`-Xms128m-Xmx256m`暂时还不清楚原理,以后在研究。问题找到了,并不是上面参数的问题,是由于Java11默认的HttpClient使用TLSv1.3的问题,修复代码:```javapublicstaticfinalHttpClientnewClient(inttimeout){returnHttpClient.newBuilder().executor(EXECUTOR)//线程池.version(Version.HTTP_1_1).followRedirects(Redirect.NORMAL)//重定向:正常.sslParameters(newSSLParameters())//SSL参数.connectTimeout(Duration.ofSeconds(timeout))//超时.build();}privatestaticfinalSSLParametersnewSSLParameters(...
Java CPU -
Java使用jlink导出模块访问HTTPS连接握手异常
错误日志如下:```Causedby:java.io.IOException:Receivedfatalalert:handshake_failureatjava.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:565)atjava.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)atcom.acgist.snail.net.http.HTTPClient.request(HTTPClient.java:206)...71commonframesomittedCausedby:javax.net.ssl.SSLHandshakeException:Receivedfatalalert:handshake_failureatjava.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)atjava.base/sun.security.ssl...
Java jlink 模块化 handshake_failure -
使用flexmark将Markdown转为HTML
最近将网站后台文章编辑器改为Markdown。直接写Markdown感觉比使用富文本编辑器更好,主要是富文本编辑会多出非常多的标签,编辑不受控制。使用Markdown转换HTML就比较令人满意了。但是这里又有一个问题了,就是外链没有加上`rel="nofollow"`,我们需要自己实现这个功能,代码如下:```javapackagecom.acgist.utils;importcom.vladsch.flexmark.ast.AutoLink;importcom.vladsch.flexmark.ast.Link;importcom.vladsch.flexmark.html.AttributeProvider;importcom.vladsch.flexmark.html.AttributeProviderFactory;importcom.vladsch.flexmark.html.HtmlRenderer;importcom.vladsch.flexmark.html.IndependentAttributeProviderFactory;importcom.vladsch.flexmark.html....
flexmark Markdown -
Tomcat启动缓慢
今天Tomcat启动很慢,以前就十几秒,现在有时候要一分钟。今天去看了下日志:```14-Oct-201911:48:05.686警告[main]org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandomCreationofSecureRandominstanceforsessionIDgenerationusing[SHA1PRNG]took[19,409]milliseconds.14-Oct-201911:48:08.221信息[main]org.apache.coyote.AbstractProtocol.startStartingProtocolHandler["http-nio-8080"]14-Oct-201911:48:08.251信息[main]org.apache.catalina.startup.Catalina.startServerstartupin39973ms```可以看到一个警告,后来看到一些文章里面说修改Java的配置:```#原配置:securerandom.source=file:/dev/uran...
Tomcat haveged -
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```![CentOS7内核](//static.acgist.com/resources/images/article/201907/15640220914191001.png)然后执行下面命令,查询启动配置:```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没有测试。回收站其实就是一个操作系统文件,我们可以在查看中将其显示出来:![Windows文件夹选项](//static.acgist.com/resources/images/article/201907/15628257464161001.png)或者直接使用Chrome浏览器查看:![Windows回收站](//static.acgist.com/resources/images/article/201907/15628258384671002.png)箭头所指就是回收站的路径,这里面有几个文件夹,对应多个用户。红色框里面的就是对应一个删除的文件,`$I`开头的就是删除文件信息,`$R`开头的就是原始文件。目录也是一样的道理。删除文件信息里面记录了删除文件的原始文件路径,删除时间等信息,使用小端模式,如下图:![删除文件信息](//static.acgist.com/resources/images/article/201907/15628261127211003.png)第一个方框:删除...
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