开发者

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

目录
  • 前言
  • 一、最开始的应用集成
    • 1、使用unihttp定义第三方访问接口
    • 2、在SpringBoot应用中集成unihttp
    • 3、启动时发生的问题
  • 二、问题解决
    • 1、一种解决办法
    • 2、未来的优化
  • 三、总结

    前言

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

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

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

     为了帮助开发者们更好地理解和解决这些问题,本文将对在SpringBoot中集成UniHttp时遇到android的无法启动的问题进行详细记录和分析。通过对这些问题的深入探讨,希望能够为其他开发者提供一些有价值的参考和借鉴,帮助他们在项目开发过程中更加顺利地使用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.Config编程客栈urableEnvironment;
    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>

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

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

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

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

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

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

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

    2、未来的优化

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

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

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

    三、总结

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

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

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜