踩坑笔记
踩坑笔记
记录自己在开发中遇到的各种问题
tomcat
post请求数据的大小值限制
- tomcat7.0之前设置 post 请求数据的大小值无限制为 maxPostSize=0
- tomcat7.0之后(包括7.0)设置 post 请求数据的大小值无限制为 maxPostSize=-1(比0小即可)
tomcat启动慢
请看博客https://blog.csdn.net/u013939884/article/details/72860358
自己简单的解决办法,可能不适用于线上环境,在 tomcat bin 目录下 catalina.sh 文件中加上
JAVA_OPTS=-Djava.security.egd=file:/dev/urandom
tomcat .sh 文件无法执行
在tomcat目录执行如下代码(777 拥有者,组用户,其他用户拥有读取,写入,执行权限)
chmod -R 777 /bin
linux
文件权限问题
定时任务写文件,三个测试环境代码完全一致,有一个环境文件内容一直写入失败。
后来查看权限后发现之前有人用root用户启动过tomcat,写文件后把文件的权限给改了,导致普通用户启动tomcat后就无法继续写这个文件。
自己的代码也有问题,异常没有处理好,如果异常处理好了这个问题能第一时间发现。(修改文件夹所属用户及用户组 chown -R user:user folder/)
验证码乱码
本地无问题,部署到 linux 环境验证码乱码,原因未安装验证码代码中对应字体,我用的是中文字体。
安装中文字体
- 安装字体服务
yum -y install fontconfig
新建目录 /usr/shared/fonts/chinese
修改chinese目录的权限
chmod -R 755 /usr/share/fonts/chinese
- 安装ttmkfdir来搜索目录中所有的字体信息,并汇总生成fonts.scale文件
yum -y install ttmkfdir
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
- 修改字体配置文件刷新内存中的字体缓存
vim /etc/fonts/fonts.conf
fc-cache
spring
懒加载以及@PostConstruct
举例,假设你想用 spring 标签 @PostConstruct 来做一些初始化数据的操作,正常情况下没有问题
@Component
public class InitData {
@PostConstruct
public void init() {
Map<String, String> map = new HashMap<String, String>();
for (int i=0;i<10;i++) {
map.put(i+"", i+"");
}
//模拟加载一些别单例模式bean的数据初始化
ErrorMsgUtil1.getInstance().setMap(map);
ErrorMsgUtil2.getInstance().setMap(map);
}
}
如果你开启了spring的懒加载模式,而且 注入 InitData 的 bean 一直没有“调用到” ,那么它一直未被真正的实例化,那么ErrorMsgUtil里的map永远是空的。
单元测试
单元测试的代码中有线程池,需要注意线程池交给spring管理,单元测试主线程完毕,线程池就被销毁,所有线程停止,造成 bug 假象
解决方案:单元测代码主线程 sleep 对应的预估线程执行时间即可。
service同一类中方法调用切面以及事务失效
在统一类中调用,不走spring代理,所以无法切入 ,解决办法,重新获取当前代理类执行方法
((XxxService) AopContext.currentProxy()).xxx();
java
fastjson
用到fastjson时却遇到一个问题,bean 对象转 json 字符串后其中一个属性丢失
public class Man {
private String info;
//数据库中的字段是s_time,所以对应生成,也就是这里出现了问题
private Date sTime;
/**/
public Date getsTime() {
return sTime;
}
public void setsTime(Date sTime) {
this.sTime = sTime;
}
}
问题出在 setsTime 方法,由于变量名称不规范导致 set 方法不规范,fastjson 无法解析,set get 后面第一个字母必须大写,遵循规范。
数据库
mybatis
报错:Column ‘update_time’ in order clause is ambiguous
原因:多表连接,排序字段在多个表中存在,需要指定以哪个表的 update_time 排序
mysql
唯一索引默认不区分大小写
唯一索引默认不区分大小写,如果要区分的话在字段设置里 Binary 为 true 即可。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com
文章标题:踩坑笔记
文章字数:965
本文作者:崔石磊(RockeyCui)
发布时间:2018-08-13, 20:02:20
原始链接:https://cuishilei.com/踩坑笔记.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。