随着项目逐步完善,一些自带bug渐渐露出了尾巴:)
本次的问题是:linux下 自定义管理员角色查询商品列表为空,而本地Windows下查询正常。
1 查看网页反馈信息
查询请求上报后,服务器返回的错误是“500 内部异常,请联系管理员”。
都内部异常了,日志里肯定该有记录,查看一下:
cd /usr/local/platform/logs
vi info.log
然而,日志里啥错误信息也莫得,这不禁让人想起了曾经记录过的问题:
linux下 部分模块Log4j日志不输出
不会异常记录模块也是linux下日志不能输出吧?
2 解决linux日志输出异常错误
查看 RRExceptionHandler.java,还真就是同一个坑 :),改吧:
原代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
……
public class RRExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
……
}
修改后:
import org.apache.log4j.Logger;
……
public class RRExceptionHandler {
protected Logger logger = Logger.getLogger(getClass());
……
}
再次部署war,用自定义管理员角色查询商品列表。
3 解决linux 查询商品列表为空
这次日志里有错误轨迹记录了:
SQL: select dept_id from sys_role_dept where role_id IN (SELECT role_id FROM SYS_USER_ROLE WHERE user_id = ?)
### Cause: java.sql.SQLSyntaxErrorException: Table 'platform-shop.SYS_USER_ROLE' doesn't exist
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'platform-shop.SYS_USER_ROLE' doesn't exist
划重点:Table ‘platform-shop.SYS_USER_ROLE’ doesn’t exist。
emm……,果然是大小写的问题又来了吗?
在Centos Tomcat 下部署Web项目中,我们在部署war项目之前修改了一个地方
修改表schedule_job的名称为SCHEDULE_JOB
原因就是linux区分大小写会导致数据库读不到正确的表格。现在熟悉的朋友又回来了:)。
查看数据库,果然table名是 sys_user_role。
查找“SYS_USER_ROLE”,出现在SysRoleDeptDao.xml
<select id="queryDeptIdListByUserId" resultType="long">
select dept_id from sys_role_dept where role_id IN (SELECT role_id FROM SYS_USER_ROLE WHERE user_id = #{value})
</select>
修改为
<select id="queryDeptIdListByUserId" resultType="long">
select dept_id from sys_role_dept where role_id IN (SELECT role_id FROM sys_user_role WHERE user_id = #{value})
</select>
再次部署war,用自定义管理员角色查询商品列表,ok!
出现过的错误更容易再次出现,古人诚不我欺!
That’s all!Thank you!