關(guān)于在Springboot中集成unihttp后應(yīng)用無法啟動(dòng)的解決辦法
前言
在當(dāng)今的軟件開發(fā)領(lǐng)域,SpringBoot框架以其簡(jiǎn)潔、高效、靈活的特點(diǎn),成為了眾多開發(fā)者構(gòu)建Java應(yīng)用程序的首選。它能夠幫助開發(fā)者快速搭建項(xiàng)目,簡(jiǎn)化繁瑣的配置過程,讓開發(fā)變得更加高效和便捷。而UniHttp作為一個(gè)聲明式的HTTP接口對(duì)接框架,也以其獨(dú)特的魅力吸引了眾多開發(fā)者的目光。它能夠極大地簡(jiǎn)化HTTP請(qǐng)求的發(fā)送過程,讓開發(fā)者像調(diào)用本地方法一樣發(fā)起HTTP請(qǐng)求,無需關(guān)注請(qǐng)求的發(fā)送細(xì)節(jié)、參數(shù)傳遞、結(jié)果處理和反序列化等問題,從而更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
然而,在將UniHttp集成到SpringBoot項(xiàng)目的過程中,開發(fā)者們往往會(huì)遇到各種各樣的問題。這些問題可能涉及到依賴沖突、配置不當(dāng)、請(qǐng)求參數(shù)處理、響應(yīng)結(jié)果解析等多個(gè)方面。例如,在引入U(xiǎn)niHttp依賴中,在配置自定義的Http客戶端時(shí),如果不熟悉Spring的配置機(jī)制,可能會(huì)出現(xiàn)配置錯(cuò)誤,影響HTTP請(qǐng)求的發(fā)送和接收。此外,在處理請(qǐng)求參數(shù)和響應(yīng)結(jié)果時(shí),也可能因?yàn)閷?duì)UniHttp的注解和方法使用不當(dāng),而導(dǎo)致數(shù)據(jù)解析錯(cuò)誤或請(qǐng)求失敗。如下圖所示,在SpringBoot中配置了UniHttp之后,導(dǎo)致整個(gè)應(yīng)用程序都無法啟動(dòng)了。

為了幫助開發(fā)者們更好地理解和解決這些問題,本文將對(duì)在SpringBoot中集成UniHttp時(shí)遇到的無法啟動(dòng)的問題進(jìn)行詳細(xì)記錄和分析。通過對(duì)這些問題的深入探討,希望能夠?yàn)槠渌_發(fā)者提供一些有價(jià)值的參考和借鑒,幫助他們?cè)陧?xiàng)目開發(fā)過程中更加順利地使用UniHttp,充分發(fā)揮其優(yōu)勢(shì),提高開發(fā)效率和項(xiàng)目質(zhì)量。如果您在集成過程中也遇到這個(gè)問題,不妨來這里看看。
一、最開始的應(yīng)用集成
為了讓第一次查閱本文的朋友對(duì)如何把Unihttp集成到SpringBoot中,這里有必要對(duì)springBoot中的集成進(jìn)行簡(jiǎn)單的講解。首先介紹如何創(chuàng)建第三方訪問接口,其次介紹如何在SpringBoot中集成unihttp,最后介紹在應(yīng)用程序啟動(dòng)后出現(xiàn)的問題。
1、使用unihttp定義第三方訪問接口
根據(jù)unihttp的官方文檔,要想在springboot中定義第三方訪問接口。我們創(chuàng)建一個(gè)第三方訪問接口,然后在接口中聲明具體訪問的接口,(這里以訪問天地圖的地址編碼和駕車路線規(guī)劃兩個(gè)接口)具體的實(shí)例代碼如下:
package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.HttpApi;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
@HttpApi(url = "http://api.tianditu.gov.cn/")
public interface TdtOptionService {
@GetHttpInterface("geocoder")
public HttpResponse<String> getGeocoder(@QueryPar("ds") String ds,@QueryPar("tk") String tk);
@GetHttpInterface("drive")
public HttpResponse<String> drivePlan(@QueryPar("postStr") String postStr,@QueryPar("type") String type,@QueryPar("tk") String tk);
}2、在SpringBoot應(yīng)用中集成unihttp
之前是在使用junit中進(jìn)行集成,只需要在Junit的方法定義中引入@UniAPIScan進(jìn)行掃描,在實(shí)際工程應(yīng)用中,我們只需要將掃描注解定義配置到Application這個(gè)入口類中即可,代碼如下所示:
package com.yelang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.stereotype.Component;
import com.burukeyou.uniapi.annotation.UniAPIScan;
import com.yelang.common.utils.IpUtils;
/**
* 啟動(dòng)程序
*
* @author 夜郎king
*/
@UniAPIScan("com.yelang.project.thridinterface") // 指定@HttpApi接口所在的包路徑
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,FlywayAutoConfiguration.class })
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}
}3、啟動(dòng)時(shí)發(fā)生的問題
萬事俱備,只欠東風(fēng),經(jīng)過上述的定義之后,我們來嘗試啟動(dòng)應(yīng)用服務(wù)。不出意外還是出現(xiàn)了意外。本來是好的應(yīng)用程序出現(xiàn)了以下的錯(cuò)誤。
***************************
APPLICATION FAILED TO START
***************************
Description:
Field tdtOptionService in com.yelang.project.education.service.impl.TdtRoutingServiceImpl required a bean of type 'com.yelang.project.thridinterface.TdtOptionService' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.yelang.project.thridinterface.TdtOptionService' in your configuration.
根據(jù)報(bào)錯(cuò)的信息來看,TdtOptionService這個(gè)類沒有注入成功。那是什么原因?qū)е铝祟悊?dòng)失敗呢?在下面小節(jié)中來詳細(xì)講解。
二、問題解決
本節(jié)將采用解決辦法來解決應(yīng)用程序無法啟動(dòng)的問題。也一并分析了這種方案的優(yōu)缺點(diǎn),最后簡(jiǎn)要介紹官方的一些信息,期待在未來的版本中進(jìn)行優(yōu)化。
1、一種解決辦法
之所以我們的應(yīng)用程序遇到了無法啟動(dòng)的情況,主要是在程序開發(fā)中我們使用了程序熱加載的邏輯,如果當(dāng)前應(yīng)用程序沒有使用這種模式。如果您的開發(fā)環(huán)境沒有引入熱加載,那么可以忽略本篇內(nèi)容。通常在springboot中引入熱加載的方法如下,首先在pom.xml中申明以下引用:
<!-- spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- 表示依賴不會(huì)傳遞 --> </dependency>
第一種方法是將以上的聲明注釋掉,注釋后再一次運(yùn)行程序,你會(huì)發(fā)現(xiàn)服務(wù)可以正常啟動(dòng)。

如果不想將Pom.xml中的相關(guān)配置注釋掉,還有一種方法就是在應(yīng)用程序中禁用熱加載,禁用設(shè)置代碼如下:
public static void main(String[] args) {
//禁用熱加載,否則unihttp集成會(huì)失敗
System.setProperty("spring.devtools.restart.enabled", "false");
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}當(dāng)然這種方法跟xml直接注釋的方法效果是一樣的。也可以成功啟動(dòng)服務(wù)。

以上兩種方法大家可以選用,都可以解決服務(wù)不能啟動(dòng)的問題。
2、未來的優(yōu)化
關(guān)于springboot的熱加載,在生產(chǎn)上不推薦大家使用。開發(fā)和測(cè)試時(shí)可以按需使用。因此如果線上不需要的話,直接關(guān)閉這個(gè)功能就可以實(shí)現(xiàn)無縫集成。后來我在翻閱unihttp的官方issue時(shí)發(fā)現(xiàn),好像有其它的朋友反饋過這個(gè)問題。

博主寫這篇文章時(shí),unihttp的版本是0.2.3??磇ssue,遇到這個(gè)問題的朋友還不止一兩個(gè),享受開源項(xiàng)目的便利的同時(shí),也要有一些包容。也期待博主可以早日兼容這種模式。對(duì)于需要在生產(chǎn)中引入這個(gè)組件的朋友,如果不是非常必要,不要開啟開發(fā)者工具的熱加載。如果必須要引用的,建議可以將工程按功能分開,這樣做到方法隔離。
三、總結(jié)
以上就是本文的主要內(nèi)容,本文將對(duì)在SpringBoot中集成UniHttp時(shí)遇到的無法啟動(dòng)的問題進(jìn)行詳細(xì)記錄和分析。通過對(duì)這些問題的深入探討,希望能夠?yàn)槠渌_發(fā)者提供一些有價(jià)值的參考和借鑒,幫助他們?cè)陧?xiàng)目開發(fā)過程中更加順利地使用UniHttp,充分發(fā)揮其優(yōu)勢(shì),提高開發(fā)效率和項(xiàng)目質(zhì)量。如果您在開發(fā)中也遇到這個(gè)問題,來這里看看吧。行文倉促,難免有許多不足之處,如有不足,在此懇請(qǐng)各位專家博主在評(píng)論區(qū)不吝留言指出,不勝感激。
到此這篇關(guān)于在Springboot中集成unihttp后應(yīng)用無法啟動(dòng)的解決辦法的文章就介紹到這了,更多相關(guān)Springboot unihttp無法啟動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA創(chuàng)建的maven項(xiàng)目中pom.xml增加新依賴無效問題及解決
在IDEA中,解決maven項(xiàng)目pom.xml增加依賴但外部庫未更新的問題,可以通過設(shè)置"構(gòu)建腳本更改后同步項(xiàng)目"選項(xiàng)為"任何更改",然后刷新Maven項(xiàng)目來解決2025-01-01
教你如何測(cè)試Spring Data JPA的Repository
Spring Data JPA 提供了一些便捷的方式來測(cè)試這種持久層的代碼,常見的兩種測(cè)試類型是集成測(cè)試和單元測(cè)試,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
SpringBoot實(shí)現(xiàn)配置文件自動(dòng)加載和刷新的示例詳解
在使用Spring Boot開發(fā)應(yīng)用程序時(shí),配置文件是非常重要的組成部分,在不同的環(huán)境中,我們可能需要使用不同的配置文件,當(dāng)我們更改配置文件時(shí),我們希望應(yīng)用程序能夠自動(dòng)加載和刷新配置文件,本文我們將探討Spring Boot如何實(shí)現(xiàn)配置文件的自動(dòng)加載和刷新2023-08-08
IntelliJ IDEA 2020.2正式發(fā)布,兩點(diǎn)多多總能助你提效
這篇文章主要介紹了IntelliJ IDEA 2020.2正式發(fā)布,諸多亮點(diǎn)總有幾款能助你提效,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-07-07
SpringCloud Gateway的基本入門和注意點(diǎn)詳解
這篇文章主要介紹了SpringCloud Gateway的基本入門和注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10

