您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring Boot1.5X怎么升級(jí)到2.0的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Spring Boot1.5X怎么升級(jí)到2.0文章都會(huì)有所收獲,下面我們一起來看看吧。
前言
依賴 JDK 版本升級(jí)
2.x 至少需要 JDK 8 的支持,2.x 里面的許多方法應(yīng)用了 JDK 8 的許多高級(jí)新特性,所以你要升級(jí)到 2.0 版本,先確認(rèn)你的應(yīng)用必須兼容 JDK 8。
另外,2.x 開始了對(duì) JDK 9 的支持。
第三方類庫升級(jí)
2.x 對(duì)第三方類庫升級(jí)了所有能升級(jí)的穩(wěn)定版本,一些值得關(guān)注的類庫升級(jí)我給列出來了。
1) Spring Framework 5+
2) Tomcat 8.5+
3) Flyway 5+
4) Hibernate 5.2+
5) Thymeleaf 3+
啟動(dòng)類報(bào)錯(cuò)
問題:
啟動(dòng)類SpringBootServletInitializer標(biāo)紅報(bào)錯(cuò),導(dǎo)入的類不對(duì)。
原因:
Spring Boot 部署到 Tomcat 中去啟動(dòng)時(shí)需要在啟動(dòng)類添加SpringBootServletInitializer,2.0 和 1.0 有區(qū)別。
解決方案:
package com.dudu;
import com.dudu.util.MyMapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@SpringBootApplication
//啟注解事務(wù)管理
@EnableTransactionManagement // 啟注解事務(wù)管理,等同于xml配置方式的 <tx:annotation-driven />
@MapperScan(basePackages = "com.dudu.dao", markerInterface = MyMapper.class)
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置文件報(bào)錯(cuò)
問題:
配置文件中項(xiàng)目名稱配置報(bào)錯(cuò):server.context-path: /spring
原因:
大量的Servlet專屬的server.* properties被移到了server.servlet下:
由此可以看出一些端倪,那就是server不再是只有servlet了,還有其他的要加入。
解決方案:
server.context-path: /spring改成server.servlet.context-path: /spring既可
Web Starter 作為傳遞依賴
問題:
工程用的模板是thymeleaf,啟動(dòng)報(bào)錯(cuò)提示找不到spring-boot-starter-web
原因:
以前有幾個(gè) Spring Boot starter 是依賴于 Spring MVC 而傳遞的spring-boot-starter-web。在 Spring WebFlux 新的支持下,spring-boot-starter-mustache,spring-boot-starter-freemarker并spring-boot-starter-thymeleaf不再依賴它。開發(fā)者有責(zé)任選擇和添加spring-boot-starter-web或spring-boot-starter-webflux。
解決方案:
導(dǎo)入spring-boot-starter-web既可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Thymeleaf 3.0 默認(rèn)不包含布局模塊
問題:
啟動(dòng)項(xiàng)目的時(shí)候發(fā)現(xiàn)首頁空白,查看后臺(tái)也沒有任何的報(bào)錯(cuò)信息
原因:
Spring Boot 2.0 中spring-boot-starter-thymeleaf 包默認(rèn)并不包含布局模塊,需要使用的時(shí)候單獨(dú)添加。
解決方案:
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>
攔截器過時(shí)
問題:
升級(jí)后,WebMvcConfigurerAdapter提示過時(shí)
原因:
升級(jí)后的springBoot,使用了java8的特性 default 方法,所以直接實(shí)現(xiàn) WebMvcConfigurer 這個(gè)接口即可。
解決方案:
舊:
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter
新:
public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer
靜態(tài)資源被攔截
問題:
訪問系統(tǒng)的時(shí)候登錄樣式?jīng)]有加載
原因:
1.5版本時(shí)候META-INF/resources / resources / static / public 都是spring boot 認(rèn)為靜態(tài)資源應(yīng)該放置的位置,會(huì)自動(dòng)去尋找靜態(tài)資源,而在spring boot 2.0則對(duì)靜態(tài)資源也進(jìn)行了攔截,當(dāng)攔截器攔截到請求之后,但controller里并沒有對(duì)應(yīng)的請求時(shí),該請求會(huì)被當(dāng)成是對(duì)靜態(tài)資源的請求。此時(shí)的handler就是 ResourceHttpRequestHandler,就會(huì)拋出上述錯(cuò)誤。
解決方案:
解決辦法就是,在攔截器那里排除靜態(tài)資源的請求路徑
/**
* 攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns 用于添加攔截規(guī)則
// excludePathPatterns 用戶排除攔截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatternss("/toLogin","/login","/assets/**","/js/**");
}
assets就是我放靜態(tài)文件的目錄
全局異常特殊處理
問題:
上一篇提到過的有些錯(cuò)誤你可能想特殊對(duì)待處理的,現(xiàn)在對(duì)應(yīng)代碼標(biāo)紅,找不到對(duì)應(yīng)的類
原因:
新版本后該方法去掉了,需要換成新的方法處理
解決方案:
舊代碼:
@Configuration
public class ContainerConfig {
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
return new EmbeddedServletContainerCustomizer(){
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));
}
};
}
}
新代碼:
@Configuration
public class ContainerConfig implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
ErrorPage[] errorPages = new ErrorPage[2];
errorPages[0] = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
errorPages[1] = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
registry.addErrorPages(errorPages);
}
}
暫時(shí)處理了以上幾個(gè)錯(cuò)誤后,項(xiàng)目就可以啟動(dòng)了,還有其他隱藏的錯(cuò)誤后續(xù)遇到了再補(bǔ)充。
關(guān)于“Spring Boot1.5X怎么升級(jí)到2.0”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Spring Boot1.5X怎么升級(jí)到2.0”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。