隨着項目逐步完善,一些自帶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!