• 我的开发日记(十一)


    今天开始联调,发现了很多自己还不具备的技能点。这周估计还得狂点技术点了。下面分享一下今天遇到的坑,以及增长的技能点吧。

    继续被自己蠢哭

    具体的代码看之前的文章:我的开发日记(六),里面有一个地方拼接SQL语句的,用到了<choose>语法,在某一个地方就忘记写了and

    旧的代码如下:

    <choose>
                    <when test="type == 1">
                        and t.name like concat("%",#{testQuery},"%")
                    </when>
                    <when test="type == 2">
                       t.id = #{testQuery}
                    </when>
                </choose>
    

    type == 2时候,程序就报错,### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't.id = '123',我以为string无法跟数据库int类型的字段id对应上,不过拿到拼好的SQL去执行,倒是没问题,着实苦恼了一阵子。

    Groovy的坑

    这里面坑主要是IDE检查的问题,有个存放常量的类,代码如下:

    package com.okay.family.common.basedata;
    
    import com.okay.family.fun.config.Constant;
    import com.okay.family.fun.frame.SourceCode;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    public class OkayConstant extends SourceCode{
    
        public static final String REQUEST_ID = "requestid";
    
        public static final String REQUEST_ID_PREFIX = "family";
    
        public static final String MARK_HEADER = "mark";
    
        public static final String USER_CERTIFICATE_KEY = "uid=";
    
        public static final String RANDOM_KEY = "random=";
    
        public static final String RULE = "value填写'uid=123'表示使用用户id为123的测试账号登录状态";
    
        public static final String MYSQL_SEPARATE = Constant.PERCENT[1];
    
        public static final long ROLE = 4L;
    
        public static final long USER_STATUS = 4L;
    
        public static final long ENV = 4L;
    
        public static final long CERTIFICATE_TIMEOUT = 20 * 60 * 1000L;
    
        public static AtomicInteger RUN_MARK = new AtomicInteger(getMark() % 100_000_000);
    
        public static AtomicInteger COLLECTION_MARK = new AtomicInteger(RUN_MARK.get() / 100);
    
    
    }
    
    

    在写到最后两行之前,程序运行都是没问题的,加上了最后两行:

        public static AtomicInteger RUN_MARK = new AtomicInteger(getMark() % 100_000_000);
    
        public static AtomicInteger COLLECTION_MARK = new AtomicInteger(RUN_MARK.get() / 100);
    
    

    这俩是为了做两个全局唯一性标记的,一开始我没注意,因为程序运行之后,这个类不用的话不用加载,也不报错。但是一旦用了之后发现总会在某个地方出错,经过试验,发现大概率是Groovy的兼容性问题,报错如下:Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.concurrent.atomic.AtomicInteger(BigDecimal),我在后面加上int类似转换依然不行,后来就放弃了,把程序改成了Java,一切就OK了。之前把项目改成Maven的时候还一直报错,还以为是Maven的兼容性问题,现在看来,有点冤枉Maven了。

    Intellij remote host工具

    我们开发环境完全是由开发自己维护的,就是一台台物理机,开发手动上传jar包或者war包,写脚本重启服务。在咨询完开发之后,觉得采取他们的方案,自己同步jar包上去。

    设置完之后,还得去激活一下,不然侧边栏没有这个选项,因为这个功能又耽误了半个小时,中间又换去别的客户端上传jar包了,网上搜来的经验总是缺乏重要的一步,哈哈。

    启动脚本

    这个搜了一个多功能启动脚本,自己改了改,学了一点点nohup的知识点,就用上了。这个坑不多,也耽误了我一些时间,主要是不会。还有就是这个程序默认了5s等待,如果在此期间程序没有正常关闭,那会导致错误。所以我改成了kill -9强制关闭,因为再去判断程序运行状态,有点复杂了,物理机就讲究一下,测试环境都是容易,比较简单。

    #!/bin/bash
    version="1.0.1";
    
    appName="family-qa.jar"
    #if [ -z $appName ];then
    #    appName=`ls -t |grep .jar$ |head -n1`
    #fi
    
    function start()
    {
    	count=`ps -ef |grep java|grep $appName|wc -l`
    	if [ $count != 0 ];then
    		echo "Maybe $appName is running, please check it..."
    	else
    		echo "The $appName is starting..."
    		nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms2G -Xmx2G 2>&1 &
    	fi
    }
    
    function stop()
    {
    	appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
    	if [ -z $appId ];then
    	    echo "Maybe $appName not running, please check it..."
    	else
            echo "The $appName is stopping..."
            kill $appId
    	fi
    }
    
    function restart()
    {
    
        stop
        for i in {5..1}
        do
            echo -n "$i "
            sleep 1
        done
        echo 0
    
    #    backup
    
        start
    }
    
    #function backup()
    #{
    #    # get backup version
    #    backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`
    #
    #    # create backup dir
    #    if [ ! -d "backup" ];then
    #        mkdir backup
    #    fi
    #
    #    # backup
    #    for i in ${backupApp[@]}
    #    do
    #        echo "backup" $i
    #        mv $i backup
    #    done
    #}
    
    function status()
    {
        appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
    	if [ -z $appId ]
    	then
    	    echo -e "33[31m Not running 33[0m"
    	else
    	    echo -e "33[32m Running [$appId] 33[0m"
    	fi
    }
    
    
    function usage()
    {
        echo "Usage: $0 {start|stop|restart|status|stop -f}"
        echo "Example: $0 start"
        exit 1
    }
    
    case $1 in
    	start)
    	start;;
    
    	stop)
    	stop;;
    
    	restart)
    	restart;;
    
    	status)
    	status;;
    
    	*)
    	usage;;
    esac
    

    • 公众号FunTester首发,更多原创文章:FunTester410+原创文章,欢迎关注、交流,禁止第三方擅自转载。

    热文精选

  • 相关阅读:
    【JavaScript】7-27 冒泡法排序 (20分)
    【JavaScript】7-26 单词长度 (15分)
    【JavaScript】7-25 念数字 (15分)
    【JavaScript】7-24 约分最简分式 (15分)
    自适应单本小说网站源码,基于bootstrap+dedecms。
    草根站长建站需要掌握或者了解的5种技术
    5个国内优秀网站设计案例分享
    (转)常用RGB色值表
    小波变换和motion信号处理(三)(转)
    小波变换和motion信号处理(二)(转)
  • 原文地址:https://www.cnblogs.com/FunTester/p/13220823.html
Copyright © 2020-2023  润新知