解决 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);
}