关于在Springboot中集成unihttp后应用无法启动的解决办法

 更新时间:2025年03月22日 15:31:27   作者:夜郎king  
本文主要介绍了在SpringBoot项目中集成UniHttp框架时遇到的无法启动问题,并提供了解决方法,作者通过详细记录和分析问题,希望为其他开发者提供有价值的参考和借鉴,感兴趣的朋友跟随小编一起看看吧

前言

在当今的软件开发领域,SpringBoot框架以其简洁、高效、灵活的特点,成为了众多开发者构建Java应用程序的首选。它能够帮助开发者快速搭建项目,简化繁琐的配置过程,让开发变得更加高效和便捷。而UniHttp作为一个声明式的HTTP接口对接框架,也以其独特的魅力吸引了众多开发者的目光。它能够极大地简化HTTP请求的发送过程,让开发者像调用本地方法一样发起HTTP请求,无需关注请求的发送细节、参数传递、结果处理和反序列化等问题,从而更加专注于业务逻辑的实现。

然而,在将UniHttp集成到SpringBoot项目的过程中,开发者们往往会遇到各种各样的问题。这些问题可能涉及到依赖冲突、配置不当、请求参数处理、响应结果解析等多个方面。例如,在引入UniHttp依赖中,在配置自定义的Http客户端时,如果不熟悉Spring的配置机制,可能会出现配置错误,影响HTTP请求的发送和接收。此外,在处理请求参数和响应结果时,也可能因为对UniHttp的注解和方法使用不当,而导致数据解析错误或请求失败。如下图所示,在SpringBoot中配置了UniHttp之后,导致整个应用程序都无法启动了。

 为了帮助开发者们更好地理解和解决这些问题,本文将对在SpringBoot中集成UniHttp时遇到的无法启动的问题进行详细记录和分析。通过对这些问题的深入探讨,希望能够为其他开发者提供一些有价值的参考和借鉴,帮助他们在项目开发过程中更加顺利地使用UniHttp,充分发挥其优势,提高开发效率和项目质量。如果您在集成过程中也遇到这个问题,不妨来这里看看。

一、最开始的应用集成

为了让第一次查阅本文的朋友对如何把Unihttp集成到SpringBoot中,这里有必要对springBoot中的集成进行简单的讲解。首先介绍如何创建第三方访问接口,其次介绍如何在SpringBoot中集成unihttp,最后介绍在应用程序启动后出现的问题。

1、使用unihttp定义第三方访问接口

根据unihttp的官方文档,要想在springboot中定义第三方访问接口。我们创建一个第三方访问接口,然后在接口中声明具体访问的接口,(这里以访问天地图的地址编码和驾车路线规划两个接口)具体的实例代码如下:

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应用中集成unihttp

之前是在使用junit中进行集成,只需要在Junit的方法定义中引入@UniAPIScan进行扫描,在实际工程应用中,我们只需要将扫描注解定义配置到Application这个入口类中即可,代码如下所示:

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;
/**
 * 启动程序
 * 
 * @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、启动时发生的问题

万事俱备,只欠东风,经过上述的定义之后,我们来尝试启动应用服务。不出意外还是出现了意外。本来是好的应用程序出现了以下的错误。

***************************
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.

根据报错的信息来看,TdtOptionService这个类没有注入成功。那是什么原因导致了类启动失败呢?在下面小节中来详细讲解。

二、问题解决

本节将采用解决办法来解决应用程序无法启动的问题。也一并分析了这种方案的优缺点,最后简要介绍官方的一些信息,期待在未来的版本中进行优化。

1、一种解决办法

之所以我们的应用程序遇到了无法启动的情况,主要是在程序开发中我们使用了程序热加载的逻辑,如果当前应用程序没有使用这种模式。如果您的开发环境没有引入热加载,那么可以忽略本篇内容。通常在springboot中引入热加载的方法如下,首先在pom.xml中申明以下引用:

<!-- spring-boot-devtools -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>

第一种方法是将以上的声明注释掉,注释后再一次运行程序,你会发现服务可以正常启动。

如果不想将Pom.xml中的相关配置注释掉,还有一种方法就是在应用程序中禁用热加载,禁用设置代码如下:

public static void main(String[] args) {
	//禁用热加载,否则unihttp集成会失败
	System.setProperty("spring.devtools.restart.enabled", "false");
	ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
}

当然这种方法跟xml直接注释的方法效果是一样的。也可以成功启动服务。

以上两种方法大家可以选用,都可以解决服务不能启动的问题。

2、未来的优化

关于springboot的热加载,在生产上不推荐大家使用。开发和测试时可以按需使用。因此如果线上不需要的话,直接关闭这个功能就可以实现无缝集成。后来我在翻阅unihttp的官方issue时发现,好像有其它的朋友反馈过这个问题。

博主写这篇文章时,unihttp的版本是0.2.3。看issue,遇到这个问题的朋友还不止一两个,享受开源项目的便利的同时,也要有一些包容。也期待博主可以早日兼容这种模式。对于需要在生产中引入这个组件的朋友,如果不是非常必要,不要开启开发者工具的热加载。如果必须要引用的,建议可以将工程按功能分开,这样做到方法隔离。

三、总结

以上就是本文的主要内容,本文将对在SpringBoot中集成UniHttp时遇到的无法启动的问题进行详细记录和分析。通过对这些问题的深入探讨,希望能够为其他开发者提供一些有价值的参考和借鉴,帮助他们在项目开发过程中更加顺利地使用UniHttp,充分发挥其优势,提高开发效率和项目质量。如果您在开发中也遇到这个问题,来这里看看吧。行文仓促,难免有许多不足之处,如有不足,在此恳请各位专家博主在评论区不吝留言指出,不胜感激。

到此这篇关于在Springboot中集成unihttp后应用无法启动的解决办法的文章就介绍到这了,更多相关Springboot unihttp无法启动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA中的延迟队列DelayQueue应用解析

    JAVA中的延迟队列DelayQueue应用解析

    这篇文章主要介绍了JAVA中的延迟队列DelayQueue应用解析,DelayQueue是一个根据元素的到期时间来排序的队列,而并非是一般的队列那样先进先出,最快过期的元素排在队首,越晚到期的元素排得越后,需要的朋友可以参考下
    2023-12-12
  • JVM进程缓存Caffeine的使用

    JVM进程缓存Caffeine的使用

    本文主要介绍了JVM进程缓存Caffeine的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Java设计模式笔记之Builder模式

    Java设计模式笔记之Builder模式

    建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同,这篇文章主要给大家介绍了关于Java设计模式笔记之Builder模式的相关资料,需要的朋友可以参考下
    2022-03-03
  • struts2框架入门

    struts2框架入门

    本文主要介绍了struts2框架的基础入门知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • spring @Conditional的使用与扩展源码分析

    spring @Conditional的使用与扩展源码分析

    这篇文章主要介绍了spring @Conditional的使用与扩展,这里需要注意如果Condition返回的是false,那么spirng就不会对方法或类进行解析,具体源码分析跟随小编一起看看吧
    2022-03-03
  • Java语言实现扫雷游戏(2)

    Java语言实现扫雷游戏(2)

    这篇文章主要为大家详细介绍了Java语言实现扫雷游戏第二部分代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Spring注解@Configuration和@Component区别详解

    Spring注解@Configuration和@Component区别详解

    @Component和@Configuration都可以作为配置类,之前一直都没觉得这两个用起来有什么差别,可能有时程序跑的和自己想的有所区别也没注意到,下面这篇文章主要给大家介绍了关于Spring注解@Configuration和@Component区别的相关资料,需要的朋友可以参考下
    2023-04-04
  • java中关于getProperties方法的使用

    java中关于getProperties方法的使用

    这篇文章主要介绍了java中关于getProperties方法的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • mybatis-plus返回map自动转驼峰配置操作

    mybatis-plus返回map自动转驼峰配置操作

    这篇文章主要介绍了mybatis-plus返回map自动转驼峰配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 详解MybatisPlus中@TableLogic注解的使用

    详解MybatisPlus中@TableLogic注解的使用

    @TableLogic一般用于实现数据库数据逻辑删除,本文我们将介绍 @TableLogic 注解的用法,以及每个属性的实际意义和用法,感兴趣的可以了解一下
    2022-06-06

最新评论