項目踩坑記錄1

🐛目錄

🐜1:主要報錯:SQLGrammarException,MySQLSyntaxErrorException,InvalidDataAccessResourceUsageException
詳細報錯:
1:org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
2:Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
3:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'teachplanm0_.course_id' in 'field list'
錯誤原因:數據庫字段名courseid與javabean實體類字段名稱courseId大小寫不一致;
解決:在javabean實體類字段名courseId上加上註解@Column(name = "courseid")並指定數據庫字段名稱courseid
注意:如果此註解@Table(name = "teachplan_media_pub")中的name的值(javabean實體類對應的表名稱)寫錯的話也會報和上面相同的錯誤;
2:Nginx無法啓動
現象:windows版nginx直接雙擊nginx.exe文件無法啓動服務,不知道是什麼原因;
解決過程:通過cmd命令行啓動,有錯誤信息。是配置文件配置錯誤,導致無法啓動。
解決:修改配置文件
啓發:啓動nginx時或其他軟件時,當無法啓動時,可以使用cmd命令行啓動,可以看到報錯信息
3:報錯信息:java.lang.RuntimeException: com.netflix.client.ClientException,feign.FeignException
詳細報錯
1:exception:
java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: xc-service-search
2:exception:
feign.FeignException: status 404 reading CourseSearchClient#getmedia(String); content:
{"timestamp":"2020-03-08T09:04:50.635+0000","status":404,"error":"Not Found","message":"No message available","path":"/getmedia/4"}
問題原因:
package com.xuecheng.learning.client;

import com.netflix.loadbalancer.ServerList;
import com.xuecheng.framework.client.XcServiceList;
import com.xuecheng.framework.domain.course.TeachplanMediaPub;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = XcServiceList.XC_SERVICE_SEARCH)
public interface CourseSearchClient {
    //根據課程計劃id查詢課程媒資
    @GetMapping(value="/search/course/getmedia/{teachplanId}")
    public TeachplanMediaPub getmedia(@PathVariable("teachplanId") String teachplanId);
}
上面代碼@GetMapping(value="/search/course/getmedia/{teachplanId}")中的地址寫錯;
解決:通過swagger查找正確的訪問地址,並修改;
4:雜項idea-maven-字符串拼接
1:使用idea中遇到的依賴報錯問題,當依賴的版本報紅時,可以右鍵代碼空白處,然後然後選擇maven——》reimport 刷新即可
2:在導入maven依賴時,直接複製粘貼全部依賴時會報錯。只有一個一個手動導入才正常。(注意不能複製粘貼,只能手動導入)
3:在idea中使用maven工程導入pom依賴時,pom文件中的依賴有報錯,但是在maven本地倉庫中是有所依賴的jar包的,此時應該進入maven的設置中,更新maven倉庫的依賴
具體步驟如下 setting   ->   搜索maven  ->  Repositores  ->  update  
4:在拼接字符串是要儘量使用Stringbuffer或者Stringbuilder儘可能不適用+號拼接,這樣當需要拼接的字符串比較多時,可以很明顯的提高程序的效率。
5:java寫json串時可以先定義map,再將map轉成json
使用com.alibaba.fastjson
//定義payload信息
        Map<String, Object> tokenMap = new HashMap<>();
        tokenMap.put("id", "123");
        tokenMap.put("name", "mrt");
        tokenMap.put("roles", "r01,r02");
        tokenMap.put("ext", "1");
        //將map轉成json串
        String jsonString = JSON.toJSONString(tokenMap);
		//json串轉換成map
        Map jsonObject = JSON.parseObject(jsonString);
6:報錯:RestClientException,BeanCreationNotAllowedException,IllegalStateException
1:org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.hibernate.mapping.Map] and content type [application/json;charset=UTF-8]

2:org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)

3:java.lang.IllegalStateException: Shutdown in progress

報錯原因分析:由第一段報錯信息可以看出錯誤與響應的類型有關,然後通過控制檯具體定位到報錯代碼所在行,發現是導包導錯了。應該導入import java.util.Map包,卻導成了import org.hibernate.mapping.Map包

到報錯代碼所在行,發現是導包導錯了。應該導入import java.util.Map包,卻導成了import org.hibernate.mapping.Map包


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章