2020年开发踩坑记录
20200207 mybatis plus 自帶insert插入異常 sql injection violation
解決方法:
使用逆向工程腳本時,生成的映射實體類在下面的注解會多table:
刪除即可
@TableName(“table:ts_app_oracle_apply”)
20200209 數據庫字段自動更新生成問題
異常描述:更新數據時,個別時間字段沒有進行更新,但是更新操作執行完成后,不該被更新的字段更新了
解決方法: 數據庫中,設計表,修改所有時間字段,根據當前時間戳更新,關閉該選項
20200210 中文亂碼問題
詳細信息:java后臺使用content-disposition屬性返回中文文件名時,出現編碼問題 urlencode編碼,需要前端解碼
access-control-allow-credentials: true access-control-allow-headers: Origin,X-Requested-With,accept,content-type access-control-allow-methods: OPTIONS,GET,POST,DELETE,PUT access-control-allow-origin: * content-disposition: attachment;fileName=%E5%A4%A9%E5%B1%B1%E5%B9%B3%E5%8F%B0%E7%94%A8%E6%88%B7%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E5%AE%89%E5%85%A8%E8%B4%A3%E4%BB%BB%E6%89%BF%E8%AF%BA%E4%B9%A6.docx content-type: application/force-download date: Mon, 10 Feb 2020 03:11:46 GMT transfer-encoding: chunked20200210 指定配置文件啟動
指定配置文件啟動命令失效,與啟動腳本與jar包同級目錄下,建立config文件夾,存放配置文件在其中,
即可指定外部配置文件啟動
20200216 文件刪除失敗
原因:沒有關閉對應輸入流
20200218 excel文件導入,將數據返回時出現空指針異常
經檢查,發現是兩張表excel中,某個字段名不一致導致
20200224 應用上線前端按鈕無法顯示
原因:在后臺的邏邏輯判斷時,只考慮了應用申請記錄不為空的前提,當應用為空的時候
控制按鈕的值就無法賦值,導致了前端控制按鈕的值為null
解決:修改判斷邏輯
20200224 nginx代理靜態資源問題
原因:在nginx代理時,需要用到靜態資源,靜態資源的目錄是從根目錄也是就是“/”開始的
n那么,在配置代理時,location后就不能帶有前綴或者后綴,只能以“/”開始的
當然也不是絕對,要考慮實際的靜態資源的狀態,去配置代理
20200224 nginx代理cas登錄問題
現象: 在使用nginx代理時,發現登錄的cas模塊會跳到代理機ip+端口的地址,不會跳到代理地址
原因: 前端代碼在寫登錄時,直接使用本地地址作為登錄地址,所有要想到正確的登錄地址,需要進行代理,才可以
20200225 文件上傳出錯
原因:文件上傳直接報錯,其實文件是上傳成功的,但是由于數據庫的某個字段不能為空,導致程序異常
返回錯誤碼,直接顯示文件上傳失敗
20200303 數據庫連接異常
要注意部署數據庫的環境與服務環境是否相同
20200314 接口請求異常
測試環境接口可以正常請求,但是正式環境無法請求,原因是正式環境無法直接請求正式環境對應接口,加了
20200316 ftp連接關閉
查看代碼時,突然發現ftp連接后沒有關閉,雖然ftp會自動關閉,但是連接過多時不關閉會對資源產生影響
20200317 無法刪除壓縮包文件
沒有關閉壓縮包文件對應的流
20200318 調用webservice接口失敗
沒有對接口地址
20200320 數據庫連接異常
忘記配置端口
20200320 文件夾創建解析異常
linux中的文件符為/,windows中的文件符為\,要注意區分
20200324 h2數據庫查詢異常
在使用輕量數據庫h2時,發現插入數據正常,但是查詢數據會報錯,會將插入的string字符串,強制轉換為int類型
檢查后發現,h2數據表的字段順序與實體類中的字段順序必選保持一致,否則會出錯
20200408 postwoman請求異常
使用postwoman時,接口無法正常請求測試,但通過swagger可以正常測試使用
定位后發現postwoman是使用XMLRequest發送請求,需要在后臺代碼中設置跨越處理
20200420 ftp文件導出異常
用戶上傳文件后無法導出下載的問題,檢查后發現代碼沒有判斷非空選項值,且ftp目錄權限存在異常,已經修復
20200421 redis數據獲取異常
redis數據庫中有對應的值,但是在代碼中無法獲取,調試后發現是序列化原因,代碼發送取值請求時,key的序列化與redis的序列化
不一致,所以獲取值失敗
20200421 控制臺日志打印異常
pom依賴存在沖突
20200421 mongoDB配置異常
在項目中沒有使用到mongoDB的任何依賴,但是運行時拋出了沒有配置mongoDB的異常
原因是在項目中使用了jmeter的依賴包,而jimter依賴包會使用MongoDB的依賴
maven在解決依賴時,會自動解決傳遞依賴,所以會自動引入mongodb的依賴,導致運行異常
只需要在啟動類中添加排除注釋即可
也可以在.iml文件中,搜索MongoDB的依賴,刪除即可
20200422 mybatis pluse 映射類構造異常
在mybatis plus的映射構造類中,使用了lamlok時,會自動建立無參構造
但是如果在構造類中手動建立了構造函數,那么mybatis在執行自帶查詢時,結果返回會自動使用建好的構造函數
會導致返回值無法返回的異常
20200422 json數據二次轉義問題
解決辦法就是,只轉一次。轉兩次就會出現這個情況,你可以把之前轉的json轉成map
20200509 jmeter使用java調用接口參數傳遞異常
場景
再使用java代碼調用jmeter的接口去發送post請求時,發現json字符串會被轉義
即雙引號,大括號之類的特殊符號會被轉義
涉及到的類為 HTTPSamplerProxy類與SampleResult類
HTTPSamplerProxy類設置請求參數,接口地址端口請求頭等信息
SampleResult類用來發送請求,并接收返回結果
但是在HTTPSamplerProxy參數傳遞的過程中并為發現字符轉義
在SampleResult發送請求時,json字符串被轉義,涉及方法為queryString方法
解決方法:
經調試發現,參數轉義步驟,檢查為什么會執行轉義
可能性猜測為.
HTTPSamplerProxy添加請求參數時,使用的形式為key:value形式,當請求參數也為鍵值對形式時
不論是post還是get,參數都會被拼接到url接口地址的后面,所以再使用SampleResult發送請求時
url中的特殊符號會全部被轉義
所以當參數為json字符串類型,且位于body時,不用添加參數的key,直接將值添加到HTTPSamplerProxy實體中即可
疑問點
1:參數位于query時,且參數為json字符串時,如何避免轉義?
此時必須轉義,否則報錯,目前只發現可以手動轉義
20200518 服務啟動正常,但是接口調用時拋出類找不到的異常
代碼無異常,配置文件無異常。
接口請求就異常
swagger-ui無法訪問
本地啟動服務無異常
經檢查:發現啟動項目的用戶權限異常
設計啟動用戶為adcloud
實際啟動用戶為root
使用自動化發布工具部署發布時,使用的是adcloud用戶
導致權限不夠,無法讀取依賴包,拋出類加載異常
20200521 Apache錯誤:[error] (OS 10038)在一個非套接字上嘗試了一個操作
解決辦法一:
可能是安裝了某些程序修改了Winsock,使用netsh winsock reset 命令修復Winsock重啟計算機即可!
解決辦法二:
在httpd.conf文件中添加 Win32DisableAcceptEx 標記,如下:
< IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
解決辦法三:
1、網上鄰居-;本地連接-;屬性-;internet協議(TCP/IP)-;屬性-;高級 -;wins標簽-;去掉啟用LMhosts查詢前的勾.
2、控制面版-;windows防火墻-;高級標簽-;本地連接設置-;服務的標簽里勾選安全Web服務器(HTTPS)。
3、然后重啟Apache
20200522 添加eureka-server服務異常
springcloud更新換代比較快,可能1.5可以使用,到了2.0就不用了。所以做項目或者練習時要看清自己使用的版本。
1.5版本使用spring-cloud-starter-eureka-server還是沒問題的。
2.0以上建議使用 spring-cloud-starter-netflix-eureka-server。
20200522 spring cloud 項目eureka client端啟動異常 Completed shut down of DiscoveryClient
添加spring boot web依賴后解決
20200522 @Autowired注解與@Resource注解的區別
:@Autowired只按照byType 注入;@Resource默認按byName自動注入,也提供按照byType 注入;
20200522 Eureka異常 EMERGENCY! EUREKA MAY BE。。
警告!Eureka可能存在維護了錯誤的實例列表(當它們沒有啟動的時候,Eureka卻把它當成啟動的了)
;Renews值小于Threshold值,因此剩下未過期的都是安全的。
原因:
這個是Eureka的自我保護機制。Eureka Server在運行期間,
會統計心跳失敗的比例在15分鐘之內是否低于85%,如果出現低于的情況(在單機調試的時候很容易滿足,
實際在生產環境上通常是由于網絡不穩定導致),Eureka Server會將當前的實例注冊信息保護起來,同時提示這個警告。
解決方案
1、在生產上可以開自注冊,部署兩個server
2、在本機器上測試的時候,可以把比值調低,比如0.49
3、或者簡單粗暴把自我保護模式關閉
20200602 Long類型異常
再生成六位驗證碼時,此處的驗證碼類型為long類型,不是String類型
發現會有小概率產生的驗證碼位數不對,由六位變為五位,且數值也與六位的數值不一樣
類舉排查后發現:
long類型的數據,以0開頭時,會出現位數變化,即下邊的情況
Long errNum = 012345L;
此時 errNum的值為10024
原因是在Java語言中
數值類型的數據:
0開頭表示八進制
0x開頭為十六進制
20200605 mybatis插入數據異常
表中字段為int,自增
實體類設置為了uuid導致異常
且數據表中字段對應差一個分隔符
20200620配置文件路徑異常
再使用方法時,.class.getClassLoader().getResource(“jmeter.properties”).getPath();
獲取到的配置文件路徑為全路徑,即絕對路徑
不是相對路徑
打包為jar包時,獲取的路徑為jar包路徑,上述方法獲取到的路徑,無法直接獲取到配置文件
導致程序異常。
20200703 線程對象問題
線程池里用傳遞的方法,不會導致新建對象,占用內存
用new的方式才會有很多 線程里面傳進去的應該是同一個實例
20200703 try,catch,finally
當三者配合使用時,及時try中進行了return,finally中的語句還是會執行
20200708 mysql插入異常
字段不能使用mysql中的保留字段,如function,delete等關鍵字
20200709 mybatis plus 注解自定義sql時,函數返回值盡量使用包裝類
20200717 mybatis plus查詢異常
實體類若自定義構造后,沒有生成空參構造,查詢字段會出現異常,導致無法將值賦予對應字段
20200727 idea全局搜索異常
快捷鍵 :Ctrl+Shift+F 步驟:設置 -->時間和語言–左側的語言–>點擊語言模塊下的"中文(中華人民共和國)"
–>點擊“選項”–>點擊鍵盤模塊下的“微軟拼音”–>選項–>點擊“按鍵”–>最下面的“熱鍵”–>簡體/繁體中文輸入切換
20200805 mybatis plus IPage分頁異常
使用IPage方法進行分頁查詢時,必須要將IPage參數放到自定義方法的第一個參數位置
否則會報異常,select one but found many;
20200805 elasticSearch無法使用root用戶啟動
20200805 mybatis plus 查詢異常
在mybatis mapper接口類中,方法不能重載
/尚未解決/
20200811 elasticSearch建索引-表異常
使用自定義json字符串,可以成功建表
使用hashMap轉成的json字符串,無法建表,
原因不明:
1:猜測hashmap無序,導致字段順序異常?
20200902 mybatis plus拼接sql異常
字段為空時,使用mybatis plus自帶的.eq()方法查詢時,
會變成查詢全部
20200831
1、spring boot切面aop使用多個 websocket會二次發送
2:linux中特殊字符^M,是應用windows下的回車
20200902 h2數據庫初始化異常
在spring boot中,使用h2本地數據庫+mysql數據庫配置倆個數據源時
遇到了h2數據表初始化異常,無法建立h2數據表
且建表語句無異常,配置文件無異常
經排查發現:
配置yml文件中,自定義多個數據源,h2無法識別
只能在.properties文件中,優先使用spring.datasource.driver-class-name的方式配置h2
然后再去yml文件中配置數據源,這樣h2數據源就會先初始化,不會導致建表語句無法執行
20200909 mybatis分頁沒有生效
使用mybatis中自帶分頁,并配置了分頁攔截
/** * mybatis-plus分頁插件<br> * 文檔:http://mp.baomidou.com<br> * 需要注意的是Page參數需要放在參數列表的第一個 */ @Bean public PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor(); } 但是實際使用中,卻沒有生效,需要在數據源配置類中加入以下代碼 ``@Bean(name = "viewSqlSessionFactory") public SqlSessionFactory sqliteSqlSessionFactory(@Qualifier("viewDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();MybatisConfiguration configuration = new MybatisConfiguration();configuration.addInterceptor(new PaginationInterceptor());sqlSessionFactory.setConfiguration(configuration);sqlSessionFactory.setDataSource(dataSource);return sqlSessionFactory.getObject(); }20200921 攔截器write.print返回字段異常
writer.print()方法不能直接打印錯誤對象,需要將對象轉化為JSON字符串,才可以返回,否則返回的為對象的內存地址。
20201027 spring boot注解@Autowired異常
現象:在開發過程中,突然方法中的String類型參數會被提示沒有String的bean,無法注入
后續發現是方法上誤加了@Autowired注解導致
20201027 spring cloud消息總線配置異常
場景,使用spring cloud的微服務網關功能注冊api時,發現注冊的api無法訪問,
數據庫中與gitlib中已經新增了新建的api的相關信息與路由
排查問題:數據庫與gitlib中都有信息,即新增操作已經成功
調用api時提示沒有該api路徑,網關服務與配置中心服務都運行正常
查看日志發現配置中心無法連接kafka服務,發現kafka服務崩潰,重啟kafka
依然無法解決;
查看配置文件,發現springcloud消息總線配置有問題,修改配置文件后重啟服務;
接口可以通過網關注冊并發現。
spring cloud消息總線中對應關系需注意,且需注意分組配置
20201027 green plum執行查詢sql異常
green plum sql語句與mysql在使用limit語句有些許不通
mysql : select from table limit begin,size
green plum : select from table limit size offset begin
調用post接口傳參異常
在調用別人開發post接口時發現,傳遞的參數放到body中,始終無法成功調用
會提示必選參數沒有傳遞,經溝通發現該接口雖為post類型,但參數接收并沒有采用body
接收參數,且在接口定義中使用@RequestParam接收參數,即只能將參數拼接到api接口地址后
才可成功調用api。
20201102 mybatis plus啟動異常
org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation. Cause: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}.
Check syntax #{property|(expression), var1=value1, var2=value2, …}
其實就是#{}里面沒有寫參數。。。
20201104 swagger-ui接口測試異常
使用spring boot集成swagger-ui進行接口測試時,發現新定義的接口無法在swagger-ui中進行測試
網頁控制臺js輸出找不到Content-Type,其他接口均使用正常
經過調試后發現,接口有一參數名為nodeType,該參數名在swagger-ui中被認為是保留字段,會被解析
導致接口無法正常調用,本次場景出現使用的swagger-ui的版本為2.6.1,在2.9.1中未遇到該問題
20201106 ftp文件下載異常
搭建好新的ftp服務器,
使用java進行ftp文件操作時,發現文件可以正常上傳,但是無法正常下載
每次下載
20201110 循環依賴
在spring boot框架中使用JDBCTemplate連接數據庫時,兩個DAO層存在了循環依賴,導致項目無法啟動
20201116 lua腳本問題
由于對lua腳本語言不是很熟悉,在nginx中使用lua腳本語言時,先使用了ngx.say的方法
然后進行業務邏輯處理, 導致后續業務邏輯無法執行,并且拋出異常,注釋ngx.say后,
該問題消失,原因可能是lua腳本的執行順序可能有比較嚴格的規定。
20201119 mysql連接問題
在使用omindb連接數據庫時,發現無法連接mysql8.0以上的數據庫
后續調整了mysql8.0的服務認證方式之后,可以連接
是因為新5.7與8.0的密碼加密方式不通
20201214 javamail smtp郵件發送異常
配置后無法正常發送,拋異常如下
JavaMail Exception: javax.net.ssl.SSLException:
Unrecognized SSL message, plaintext connection?
經搜索排查后,修改配置文件如下:
Properties props = new Properties();
props.setProperty(“mail.smtp.auth”, “true”);
props.setProperty(“mail.debug”, “true”);//啟用調試
props.setProperty(“mail.smtp.starttls.enable”, “true”);//添加這個
props.setProperty(“mail.smtp.ssl.enable”, “true”);
props.setProperty(“mail.imap.socketFactory.fallback”, “false”);
//不需要這個
//props.setProperty(“mail.imap.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”);
原因尚不明確,需繼續排查,可能是如下原因
配置JavaMail的Properties時,不要指定“mail.smtp.socketFactory.class”,因為TLS使用的是普通的Socket。
然后指定屬性“mail.smtp.starttls.enable”為“true”。
20201214 nginx代理異常
再使用nginx二級目錄方式代理多個不同項目時,出現了靜態資源404的問題
經排查后發現是不通項目中文件資源路徑的問題
只能使用單端口代理單服務,不會出現該問題
20201214 jpa實體類參數問題
在使用jpa自定義sql查詢,映射實體類時,
當使用的語句是*時,要注意數據庫中的表字段與實體類中的字段順序是否一致
不一致會出現類型映射異常
20201216 maven打包異常
場景:更換maven配置文件后,使用maven打包項目,拋出異常,無法識別字段
但是項目中所有依賴均無報錯,清除緩存后也可本地正常啟動,只是打包無法打包
會提示一系列異常
排查:在處理該問題時,百度了很多方法,均未生效,將原有maven本地倉庫刪除,重新導入
依賴,也沒有任何作用,還原配置文件,也沒有作用,發現idea中配置好后maven,使用
右側工具欄的maven插件,可以編譯打包,但是命令行打包依舊失敗
在配置IDEA中maven路徑時,發現有IDEA自帶maven配置,問題可能出現在這里
嘗試解決: 打開IDEA默認maven配置路徑,發現在C盤用戶名下的.m2文件夾內,依舊有一個maven
配置文件,該配置文件中的配置為默認配置,可添加公網依賴,但是無法添加內網依賴,
修改該配置文件后,打包正常
可能原因: 命令行使用maven打包命令時,讀取配置文件的順序可能是這樣的:
maven安裝目錄配置-》系統自帶maven配置
即C盤下的配置文件,優先度可能高于安裝目錄的配置文件
這樣就導致在IDEA中配置好后maven,使用右側maven工具插件可以打包,因為IDEA會去讀
項目配置好的,而不去讀系統默認的
但在命令行中,會使用系統變量中的maven,讀取配置文件的順序也如上所述,所以導致無法打包
20201218 swagger-ui模型綁定異常
場景:在srping boot中使用swagger2.9.2時,接口參數定義類型為Double
在啟動時會報異常 databind error
解決:排查后發現是swagger2.9.2中自帶的swagger-models存在bug,需要單獨導入
導入方式如下,即可避免數值類型的參數綁定異常
20201218 maven打包的jar包運行正常,但是調用接口時,接口拋異常
場景:本地IDEA中運行,調用接口無異常,本地打包后,運行jar包,提示com.sun.**類不存在
排查:檢查jdk中的jre是否缺少該jar包,發現缺少,復制jdk中的tool.jar,重新打包,問題存在
有博客說是因為jdk1.8打包時會排除jdk1.5的com.sun的包,估修改pom配置文件如下
問題依舊存在,清除緩存,重新導入maven,清楚idea緩存,maven命令clean,update
均未生效,其他項目打包正常,唯獨該項目存在這個問題
解決:迫于無奈,只能使用本地依賴的方式,pom中指定tool.jar包,問題解決
可能原因:該項目使用了公司內部的frm框架,有部分frm框架jar包因業務不需要,去除后
出現了該問題,可能的原因去除的frm框架依賴包中有改tool.jar依賴,但是父依賴
依舊使用的frm依賴,即可能導致maven認為該項目不需要導入tool.jar,導致依賴丟失
本地運行時正常,運行時可能使用了本地jdk中的依賴,所以不會報錯,真正原因尚未定位。
總結
以上是生活随笔為你收集整理的2020年开发踩坑记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫|爬取喜马拉雅音频
- 下一篇: 网站访问登陆原理