解决 springboot Interceptor @Autowired null技术
看如下代码块:
package com.lmlphp.nb.config; import com.lmlphp.nb.interceptor.WebInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class InterceptorConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new WebInterceptor()) .addPathPatterns("/*") .excludePathPatterns("/login"); super.addInterceptors(registry); } }
VPS snapshot 之后重启防火墙丢失技术
记录下前阵子由于某些原因被强制停机,系统被快照之后出现的一些问题。
首先当然是数据库崩溃啦,无法启动。参考我的另一篇文章 is marked as crashed and last (automatic?) repair failed。
然后出现的问题有 SSH 无法登录;screen 会话丢失,估计 screen 是存储在内存中导致。
SSH 登录报错:ssh: connect to host lmlphp.com port : No route to host。
出现这种原因是由于防火墙设置问题,要先检查防火墙的设置,如下步骤:
- 查看防护墙状态:service iptables status
- 关闭防火墙:service iptables stop
不靠谱的 execCommand 之 insertText技术
最近发现编辑器在执行 insertHTML 遇到剪切板内容为标签时,出现的怪异现象,于是改成了 insertText。实在搞不懂 MDN 上的 paste 是什么作用,被坑了好几次。
document.execCommand("insertText",false,text);
上面的方式做了一次变更,因为 insertText 粘贴的时候会产生很多节点,不能很好的处理换行,不知道怎么回事,最后改为如下。
document.execCommand("insertHTML",false,$('<div/>').text(text).html());
搞来搞去,归根结底,execCommand 方法只有 insertHTML 有点用,其他全是没什么作用的。
springboot mybatis 多数据源配置技术
关于 Java 技术,其实 Java 技术不需要有创造力的人,只需要按部就班,死记硬背就可以。Java 技术已经被大型组织和集团给垄断了,大家用的技术大都是 Oracle,Apache 这些组织的代码,所有的东西都已经实现,所以不需要创造力。有些科学家也会吐槽,说 Java 技术是传教性质的,一旦进入,很难出来。
Java 技术缺少的是什么,是傻逼教程,说好听点,就是手把手教程,怎么建立文件夹,怎么创建文件,怎么复制代码。一个程序员熟练了 Java 技术,也就是熟练了这些,真正框架内部的东西是不可能熟练的,因为量太大,人生苦短。
开始手把手教程,希望帮助到大家。
maven 依赖配置:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.2</version> </dependency>
基于 HTML5 的 EventSource 实时推送实现技术
本文介绍 Comet 的 EventSource 实现方式,EventSource 对象只是对数据格式进行了简单的封装。服务端加上 event-stream 的头声明,数据以事件流的方式传递,保持长连接。
先上代码吧,后端代码示例 chat.php:
if (isset($_REQUEST['message'])) { file_put_contents('/tmp/message.txt', time() . '||data: ' . $_REQUEST['message'] . "\n", FILE_APPEND); echo $_REQUEST['message']; exit; } function output($v) { echo "data: {$v}\n\n"; ob_flush(); flush(); } header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header("Content-Encoding: none"); header('X-Accel-Buffering: no'); $last = time(); for (;;) { // exec('tail -n 1 /tmp/message.txt', $data); $tempArr = file('/tmp/message.txt'); $arr = explode('||', end($tempArr)); if ($arr[0] <= $last){ sleep(1); continue; } $last = $arr[0]; output($arr[1]); sleep(1); }