項目地址:https://github.com/simperLv/springboot2.0,歡迎大佬們提出寶貴意見
1.SpringBoot中構(gòu)建帶有含參構(gòu)造函數(shù)的Bean
報錯信息如圖1

解決方案:使用@Bean注解手動創(chuàng)建ImageServiceImpl的實例,具體步驟如下:
1、定義BeanConfig類(或者將Bean的定義直接寫在Application啟動類中),如圖2

2、修改ImageServiceImpl(含有參構(gòu)造函數(shù)的Bean),如圖3,注意,其中的@Service(或者@Component、@Controller、@Repository、@Configuration這些用來定義Bean的注解)注解一定要注釋掉或者刪掉,這樣才能夠讓自己手動構(gòu)建的Bean起作用:

感謝博客:SpringBoot中構(gòu)建帶有含參構(gòu)造函數(shù)的Bean,解決報錯Parameter 0 of constructor in XXX required a bean ... - CSDN博客 ,我這里是直接把構(gòu)造函數(shù)刪除了。
2.Configuration Annotation Proessor not found in classpath
這個是我在添加@ConfigurationProperties(prefix ="XXX")這個注解時,出現(xiàn)的。
具體原因:
1、出現(xiàn)spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProperties這個注解時,所以問題出現(xiàn)在ConfigurationProperties注解。
2、根據(jù)提示的not found in classpath,查詢此注解的使用關(guān)于怎么指定classpath,進(jìn)而查詢location,spring boot1.5以上版本@ConfigurationProperties取消location注解
解決方案:圖4

鏈接:Spring Boot 踩坑之路之 Configuration Annotation Proessor not found in classpath - CSDN博客
3.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
? ? ? ? 這個問題真是把我坑死了,據(jù)說是sql用戶沒有權(quán)限,然后就按照網(wǎng)上的方法試了很多,結(jié)果都不行,很多都是說application.yml中的數(shù)據(jù)庫密碼如果是數(shù)字就要用引號包起來,結(jié)果還是不行,最后修改my.ini成功解決了(打開后,搜索mysqld關(guān)鍵字。找到后,在mysqld下面添加skip-grant-tables,保存退出),如圖5,鏈接:鏈接

4.spring boot 整合mybatis,Junit時報錯,org.apache.ibatis.binding.BindingException: Invalid bound statement(not found)
報錯信息如圖,6

找了很久,最后總結(jié)原因是因為掃描不到xxxMapper.xml,
解決辦法:將xxxMapper.xml文件放在了src/main/resources下,然后在application.properties文件中添加配置
mybatis.mapper-locations=classpath:mappings/*.xml
或者在application.yml文件中加入配置
mybatis:
? ? mapper-locations: classpath:mappings/*.xml
或者使用@Select、@Insert、@Update、@Delete注解代替xxxMapper.xml里面的內(nèi)容,這樣就不存在掃描xxxMapper.xml文件的問題了。
5.使用Druid作為springboot的數(shù)據(jù)源(添加監(jiān)控)
之前引入druid的包,鏈接:druid鏈接,結(jié)果不能監(jiān)控sql,于是找到兩種解決方法:
1.添加圖7方法到DruidConfiguration類中

在添加方法后還是報錯(圖8),原因是配置文件中有l(wèi)og4j配置(圖9),需要將該配置刪掉


2.將Druid的pom坐標(biāo)替換成starter(如圖10),鏈接:druid-spring-boot-starter鏈接,starter已經(jīng)自動集成了監(jiān)控,所以不需要添加過多的配置

兩種方法嘗試后都是可行的,然后我采用的方法2.
6.SpringBoot 配置使用fastjson中文亂碼的問題
在學(xué)習(xí)springboot中配置fastjson時,發(fā)現(xiàn)打印出來的json數(shù)據(jù)出現(xiàn)中文亂碼如圖11,配置信息類如圖12


在上網(wǎng)查詢之后,發(fā)現(xiàn)可以通過圖13方式修改(這里由于不清楚MediaType是什么東西,于是在簡書上找到一位朋友的介紹: MediaType指的是要傳遞的數(shù)據(jù)的MIME類型,MediaType對象包含了三種信息:type? 、subtype以及charset,一般將這些信息傳入parse()方法中,這樣就可以解析出MediaType對象,比如 "text/x-markdown; charset=utf-8" ,type值是text,表示是文本這一大類;/后面的x-markdown是subtype,表示是文本這一大類下的markdown這一小類; charset=utf-8 則表示采用UTF-8編碼。鏈接:關(guān)于MediaType的詳細(xì)介紹),修改后結(jié)果如圖14


7.Table 'travel.hibernate_sequence' doesn't exist
在使用攔截器記錄SpringBoot的請求日志時,在寫入日志時,報錯Table 'travel.hibernate_sequence' doesn't exist,發(fā)現(xiàn)是因為主鍵自增長策略問題。需要將JPA中的實體類ID生成略組改成@GeneratedValue(strategy = GenerationType.IDENTITY).
關(guān)于主鍵策略(鏈接:主鍵策略):
@GeneratedValue:主鍵的產(chǎn)生策略,通過strategy屬性指定。
主鍵產(chǎn)生策略通過GenerationType來指定。GenerationType是一個枚舉,它定義了主鍵產(chǎn)生策略的類型。
1、AUTO自動選擇一個最適合底層數(shù)據(jù)庫的主鍵生成策略。如MySQL會自動對應(yīng)auto increment。這個是默認(rèn)選項,即如果只寫@GeneratedValue,等價于@GeneratedValue
(strategy=GenerationType.AUTO)。
2、IDENTITY 表自增長字段,Oracle不支持這種方式。
3、SEQUENCE 通過序列產(chǎn)生主鍵,MySQL不支持這種方式。
4、TABLE 通過表產(chǎn)生主鍵,框架借由表模擬序列產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫移植。不同的JPA實現(xiàn)商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一個hibernate_sequences表,而TopLink則生成sequence表。這些表都具有一個序列名和對應(yīng)值兩個字段,如SEQ_NAME和SEQ_COUNT。
8.The field file exceeds its maximum permitted size of 1048576 bytes
在實現(xiàn)springboot上傳文件時,出現(xiàn)文件過大的錯誤,但是我在yml中是設(shè)置了文件大小沒有效果,在查找資料時發(fā)現(xiàn),還可以在springboot啟動類中配置。如下圖15,問題解決。
