最近在部署项目的时候,远程连接数据库,一直导致系统页面崩溃。
<property name="jdbcUrl">jdbc:mysql://IP/域名:3306/vosmap_clean</property>
由于域名映射比较耗时,可以直接写上IP地址,这样反而可以避免域名突然访问不了而导致找不到目标源。
然而部分数据却可以访问,一直抛出的是NULL POINT的异常,让人摸不着头脑。
假若是服务器mysql安装不当,按理说应该所有数据都访问不了的。然而用navicat连接服务器,并运行SQL时,一切正常。摸不着头脑。
经过很多天的思考,终于发现,可能是项目用到的C3P0连接池在捣鬼。点击响应页面之前,可能已经超出响应时间,所以没法访问数据信息。
于是,在C3P0的配置文件,把<property name="checkoutTimeout">0</property>,设置为0后,不限响应时长,终于把这个问题解决了。
在Linux环境对mysql的命令:
查看最大连接数
mysqladmin -uroot -p processlist
登录mysql
mysql -h localhost -u root -p密码
mysql> status
mysql> show processlist;
命令: show status;
http://blog.sina.com.cn/s/blog_4f925fc30102elfq.html(linux下查看MySQL的当前连接数 )
具体过程:
远程服务器提交表单后出现null异常,这个问题在技术交流会上有单独拿出来讨论,一直没有人能够解决。疑点是:部分数据可以访问,提交某些数据却一直抛出是NULL POINT的异常,让人摸不着头脑。这个问题一直滞留了一个多礼拜。
假若是服务器mysql安装不当,按理说应该所有数据都访问不了的。然而用navicat连接服务器,并运行SQL时,一切正常。摸不着头脑。
yd和我在修改后端SQL代码的时候发现,可能是项目用到的C3P0连接池在捣鬼。点击响应页面之前,可能已经超出响应时间,所以没法访问数据信息。
于是,在C3P0的配置文件,把<property name="checkoutTimeout">0</property>,设置为0后,不限响应时长,终于把这个问题解决了。
然而在后续操作(教辅情况分析和小节分析)中,又抛出null异常。因为在x阶段做选择范围的时候残留下了一个后遗症没有解决,当初是逆向递推的思想做:
String sql="SELECT pk_scope_id from t_scope WHERE `level`=3 and `name`='"+grade+"' and fk_parent_id IN (
SELECT pk_scope_id from t_scope WHERE `level`=2 and `name`='"+version+"' AND fk_parent_id IN (
SELECT pk_scope_id FROM t_scope WHERE `level`=1 and `name`='"+subject+"'))";
当初的做法是确认出name(从前端回传)和id,才能确定parent_id,
即需要确认name和id才能确认上一级的父节点,我们测试发现,在远程数据库那边出现了name???,没错,学立方的排序规则是utf8_general_ci,而我远程的服务器部署的默认排序规则却为utf8_unicode_ci,为了使其不冲突(使项目健壮性更佳),我们尝试用正向思想做,只要取出id即可,这样遇到中文也不会冲突,而很多条sql都要做相应的改变。前期对数据库不够熟悉,逆向做要取名字,还要分level查,吃力不讨好。
作者: @nanphonfy
Email: nanphonfy (Nfzone) gmail.com 请将(Nfzone)换成@