`
大涛学长
  • 浏览: 111452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

稳定性专题 | Spring Boot 常见错误及解决方法

阅读更多
找不到配置?配置不对?配置被覆盖?
-----------------

**Spring Boot 配置加载过程解析:**

1、Spring Boot 配置的加载有着约定俗成的步骤: 从 resources 目录下加载 application.properties/application.yml ; 再根据里面的 spring.profiles.active 来加载不同 profile 的配置文件 application-dev.properties/application-dev.yml (比如加载 profile 为 dev 的配置文件)。

2、Spring Boot 所有的配置来源会被构造成 PropertySource,比如 -D 参数, -- 参数, 系统参数, 配置文件配置等等。这些 PropertySource 最终会被添加到 List 中,获取配置的时候会遍历这个 List ,直到第一次获取对应 key 的配置,所以会存在优先级的问题。具体配置的优先级参考: 
[https://stackoverflow.com/a/45822571](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstackoverflow.com%2Fa%2F45822571)

**配置覆盖案例:** 
Nacos 服务注册的 IP 可以通过 spring.cloud.nacos.discovery.ip 设置,当我们打成 JAR 包之后,如需修改注册 IP,可以通过 -Dspring.cloud.nacos.discovery.ip=xxx(-D 参数配置的优先级比配置文件要高)。

**配置问题排查:** 
进入 [http://host:port/actuator/env](https://yq.aliyun.com/go/articleRenderRedirect?url=http%3A%2F%2Fhost%2Factuator%2Fenv) 这个 endpoint 查看具体的配置项属于哪个 PropertySource。

Jar 包启动不了
---------

执行 Spring Boot 构建的 jar 包后,返回 "my.jar中没有主清单属性" 错误。

错误分析: Spring Boot 的正常 jar 包运行方是通过 spring-boot-loader 这个模块里的 JarLauncher 完成的,该类内部提供了一套运行的规范。

解决方案: 在 pom 里加上 spring-boot-maven-plugin 的 maven 插件配置(该插件会在 jar 里加入 spring-boot-loader 的代码,并在 MANIFEST.MF 中的 Main-Class 里写入 JarLauncher):

```
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

```

![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")

自动化配置类没有被加载
-----------

条件注解是 Spring Boot 的核心特性之一,第三方的 starter 或我们自定义的 starter 内部都会加载一些 AutoConfiguration,有时候会存在一些 AutoConfiguration 没有被加载的情况。导致出现 NoSuchBeanDefinitionException, UnsatisfiedDependencyException 等异常 
排查步骤(三种方式):

1、把 spring 的日志级别调到 debug 级别: 
logging.level.org.springframework: debug。 
2、从 ApplicationContext 中获取 ConditionEvaluationReport,得到内部的 ConditionEvaluationReport.ConditionAndOutcomes 类中的输出信息。 
3、进入 [http://host:port/actuator/conditions](https://yq.aliyun.com/go/articleRenderRedirect?url=http%3A%2F%2Fhost%2Factuator%2Fconditions) 这个 endpoint 查看条件注解的 match 情况。

这是日志打印的不满足条件的 AutoConfiguratoin:

```
Unconditional classes:
----------------------

    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration

    org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration

    org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration

    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration

    org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration

    org.springframework.cloud.client.CommonsClientAutoConfiguration

    org.springframework.cloud.commons.httpclient.HttpClientConfiguration

    org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration

    org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration
```

![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")

定义的 Component 没有被扫描到
--------------------

@SpringBootApplication 注解内部也会使用 @ComponentScan 注解用于扫描 Component 。默认情况下会扫描 @SpringBootApplication 注解修饰的入口类的包以及它下面的子包中所有的 Component 。

@ComponentScan: 
[https://github.com/StabilityMan/StabilityGuide/blob/master/ComponentScan](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FStabilityMan%2FStabilityGuide%2Fblob%2Fmaster%2FComponentScan)

这是推荐的包结构中项目的结构:

![lADPDgQ9rbvwOuPNAQrNAXQ_372_266_jpg_620x10000q90g](https://yqfile.alicdn.com/f92446ef7d766483e5839bb64bfc6b90d25a78ab.jpeg)

*   exclude 包下的类不会被扫描到,card 包下的类会被扫描到。
*   Actuator Endpoint 访问不了
*   访问 Actuator,出现 404 错误。

 

 

 

[原文链接](https://yq.aliyun.com/articles/741897?utm_content=g_1000100663)

本文为阿里云内容,未经允许不得转载。
分享到:
评论

相关推荐

    spring boot面试题及答案.docx

    - **注意事项**:DevTools虽然方便,但在生产环境中不应该启用,因为它可能会导致不必要的重启,影响应用的稳定性。 综上所述,Spring Boot不仅极大地简化了Spring应用的开发流程,还提供了丰富的功能来满足实际...

    pit1_spring boot之 maven install 报错[Maven]1

    在Spring Boot项目中,`maven install` 是一个常见的构建步骤,它用于将项目打包成可部署的格式,如JAR或WAR,并将其安装到本地Maven仓库。然而,当出现错误 `[ERROR] Failed to execute goal org.springframework....

    spring-boot-2.2.4.RELEASE.zip

    Spring Boot 2.2.4.RELEASE是2.2.x系列的一个稳定版本,提供了许多性能优化和错误修复。这个版本引入的新特性包括: 1. **依赖升级**:升级了众多依赖库的版本,如Spring Framework、Thymeleaf等,确保了与最新技术...

    vue,spring boot权限管理系统.rar

    Vue.js与Spring Boot结合构建的权限管理系统是一种常见的现代Web应用架构模式。Vue.js是一个轻量级的前端JavaScript框架,以其组件化、响应式和易学习的特性受到开发者的喜爱;而Spring Boot是基于Spring框架的简化...

    卫通星GPS定位器GT06协议socket通讯JAVA Spring Boot对接

    为了保证通信的可靠性,我们还需要处理异常情况,如连接断开、数据解析错误等。此外,可以考虑使用线程池来并发处理多个设备的连接请求,提高系统处理能力。 在测试阶段,可以模拟GPS定位器发送数据到服务器,验证...

    Spring Boot的自动化配置实现swagger2引入spring boot生成API文档.docx

    ### Spring Boot的自动化配置实现swagger2引入spring boot生成API文档 #### 一、Spring Boot与Swagger集成概述 在现代Web开发中,API文档对于确保良好的系统间通信至关重要。随着微服务架构的兴起,API文档的需求...

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    1. **Spring Boot**: Spring Boot是Spring框架的简化版,它内置了常见的配置,如Tomcat服务器、Spring MVC、数据源等,使得开发者可以快速地搭建应用。通过“起步依赖”(Starter POMs)来引入所需的模块,如Spring ...

    spring-boot-3.0.12.zip

    3.0.12 版本可能包含了针对早期版本的一些改进和增强,确保了框架的稳定性和兼容性。 SpringBoot 的核心特点包括: 1. **自动配置**:Spring Boot 根据项目中的依赖自动配置应用,无需手动编写大量的配置代码。它...

    Spring Boot 微信点餐系统.docx

    【Spring Boot 微信点餐系统】是一个使用Spring Boot框架构建的应用,旨在实现一个基于...这些技术共同保证了系统在高并发场景下的稳定性和可靠性。为了深入了解这些知识点,可以通过提供的链接进一步学习相关文章。

    基于Spring Boot的简单Java爬虫.zip

    7. **异常处理**:爬虫过程中可能会遇到各种网络错误,如超时、重定向、404错误等,良好的异常处理机制是必要的,以确保程序的健壮性。 8. **日志记录**:使用Log4j、SLF4J或Spring Boot自带的日志框架,记录爬虫...

    spring boot file upload

    在Spring Boot框架中,文件上传是一项常见的功能,用于接收客户端发送的文件并将其保存到服务器。这个场景在Web应用中非常普遍,例如用户上传头像、上传文档等。本篇文章将详细探讨Spring Boot如何实现文件上传,...

    快速搭建SpringBoot工具spring-boot-plus-master.zip

    本文将深入探讨Spring Boot Plus的核心特性和使用方法,以及如何利用IDEA进行项目集成与开发。 首先,Spring Boot本身是一个由Pivotal团队开发的框架,它简化了Java应用程序的创建,通过自动配置Spring框架和其他...

    java Spring Boot 1.5.22 JPA数据库 JDK1.6

    这个版本是Spring Boot的稳定版本之一,提供了许多功能和改进,使其成为企业级应用开发的理想选择。JPA(Java Persistence API)是Java平台上的ORM(对象关系映射)标准,它允许开发者用面向对象的方式操作数据库,...

    spring boot+java +jsoup+ 爬虫

    Spring Boot + Java + Jsoup 爬虫是一个常见的技术组合,用于构建高效、简洁的网络爬虫项目。本文将深入探讨这些技术如何协同工作,以及如何利用它们来抓取和处理网页上的图片资源。 首先,Spring Boot 是一个由...

    Spring boot 数据库连接断线重连问题

    Spring Boot 数据库连接断线重连问题解决方案 Spring Boot 是一个基于 Java 语言的开源框架,它提供了许多功能来帮助开发者快速构建 Web 应用程序。然而,在使用 Spring Boot 连接数据库时,可能会遇到断线重连的...

    Spring Boot 封装的文件上传接口示例

    在Spring Boot框架中,文件上传是一项常见的功能,用于接收客户端发送的文件数据。在这个"Spring Boot 封装的文件上传接口示例"中,我们将深入探讨如何实现这一功能,以及如何利用Postman进行测试。 首先,Spring ...

    把Spring boot jar作为服务运行

    ### 如何将Spring Boot Jar作为服务运行 ...总之,通过Java Service Wrapper,我们可以轻松地将Spring Boot应用部署为Windows服务,实现自动化启动和服务管理,极大地提高了应用的稳定性和可维护性。

    springboot+netty实现mqtt协议的broken

    4. 错误处理和恢复机制:设计处理连接中断和重连的策略,保证服务的稳定性。 5. 自定义需求:项目描述提到可以定制化自己的需求,这可能涉及到添加特定的业务逻辑,如数据过滤、存储、通知等。 这个项目对于学习和...

    基于spring boot的仓库物流管理系统(springboot+mybatis-plus+shiro+mysql.zip

    9. **单元测试与集成测试**:为了确保系统的稳定性和正确性,开发过程中会进行单元测试(针对单个组件或方法)和集成测试(检查不同组件之间的交互)。Spring Boot提供了JUnit和Mockito等测试工具的支持。 10. **...

    阅读3服务器版,桌面端,iOS可用。后端 Kotlin + Spring Boot + Vert.x + Corou.zip

    《阅读3服务器版:Kotlin、Spring Boot、...无论是后台数据处理还是前端响应,都展现出卓越的性能和稳定性。这种技术组合无疑为开发高效、灵活的现代应用提供了强大的工具箱,展示了IT行业在软件工程领域的创新和进步。

Global site tag (gtag.js) - Google Analytics