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

继续被自己蠢哭

具体的代码看之前的文章:我的开发日记(六)​,里面有一个地方拼接​​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​​包上去。

我的开发日记(十一)_Spring Boot

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

我的开发日记(十一)_sql_02

启动脚本

这个搜了一个多功能启动脚本,自己改了改,学了一点点​​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 "\033[31m Not running \033[0m"
else
echo -e "\033[32m Running [$appId] \033[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 欢迎关注、交流,禁止第三方擅自转载。