踩坑笔记

踩坑笔记

记录自己在开发中遇到的各种问题

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏