springboot知识点

1.springboot 的优势#

  1. 快速开发:Spring Boot 自动配置很多常见的 Spring 组件,使得开发过程更加高效快捷。
  2. 简化配置:Spring Boot 自动配置了许多常见的配置,极大地简化了应用程序的配置过程。
  3. 微服务支持:Spring Boot 可以轻松地构建微服务应用程序,支持常见的微服务技术栈,如 Spring Cloud。
  4. 易于部署:Spring Boot 应用程序可以打包成独立的可执行 JAR 文件,方便部署和迁移。
  5. 社区活跃:由于 Spring Boot 是一个非常流行的框架,因此拥有庞大的社区支持,可以获得丰富的文档、教程和解决方案

2.springboot自动装配原理:https://blog.csdn.net/qq_40553042/article/details/109425424#

@EnableAutoConfiguration注解(开启自动配置)

点击AutoConfigurationImportSelector类,我们可以核心代码就在该类中,自动配置原理就在这个方法中:

而loadFactoryNames方法在一个叫SpringFactoriesLoader类中,具体自动配置原理就是这里:

会自动扫描所有项目下ONFACTORIES_RESOURCE_LOCATI这个路径(META-INF/spring.factories)下的类,那么这个路径是啥?我们找到具体点的文件:

SpringBoot的自动配置就是通过自定义实现ImportSelector接口,然后通过SpringFactoriesLoader扫描autoconfigure包下的META-INF/spring.factories中所有路径下的类,并通过反射实例化成一个个的配置类并注入到Spring容器中,从而实现了自动装配,想到这里,我们其实也可以自定一个starter,然后交给SpringBoot自动来装配即可

3. 在Spring Boot 中如何解决跨域#

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfifigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

4.application.yml 和 bootstrap.yml的区别#

application.yml和bootstrap.yml是Spring Boot中用于配置应用程序的两个主要文件。

  1. 加载顺序不同:bootstrap.yml先于application.yml加载。bootstrap.yml用于应用程序上下文之前的阶段,可以用来加载一些系统级别的配置信息。
  2. 作用范围不同:bootstrap.yml中定义的属性会覆盖所有其他配置文件,包括application.yml。通常情况下,bootstrap.yml中的配置很少需要修改。
  3. 属性优先级不同:如果在不同的配置文件中定义了相同的属性,则最后加载的配置文件中的属性将具有优先级。

总体来说,bootstrap.yml用于应用程序启动前的系统配置,而application.yml用于应用程序运行时的应用程序配置。

5.Spring Boot 中的监视器#

  1. Health Indicator:通过实现HealthIndicator接口来提供应用程序的健康状况。Health Indicator可以返回一个Status对象,其中包含应用程序的健康状态信息。
  2. Metrics:Spring Boot内置了Metrics功能,它可以帮助开发人员收集和展示应用程序的度量数据。Metrics提供了多种方式来收集数据,例如通过Actuator端点、注解或手动编程等方式。
  3. Trace Web Requests:通过启用Trace Web请求功能,可以跟踪每个HTTP请求的执行情况。Trace Web请求功能提供了一个特殊的HTTP头部,用于跟踪请求的执行链路,并将其存储在日志文件中。
  4. Scheduled Tasks:Spring Boot可以显示当前应用程序中所有运行中的定时任务。通过访问Actuator端点,可以查看定时任务的状态和执行情况。

6.如何监视所有 Spring Boot 微服务#

  1. 使用Spring Boot Admin:Spring Boot Admin是一个开源的监控和管理Spring Boot应用程序的工具。它提供了一个Web界面,可以查看每个应用程序的详细信息、监控指标和日志。
  2. 使用Prometheus和Grafana:Prometheus是一个开源的系统监控和警报工具,而Grafana则是一个开源的数据可视化工具。这两个工具可以结合使用,来监控Spring Boot微服务的健康状况和性能指标。
  3. 使用ELK Stack:ELK Stack由Elasticsearch、Logstash和Kibana三个开源组件组成,可以用来集中存储和分析日志数据。将Spring Boot微服务的日志数据发送到ELK Stack中,可以方便地进行日志分析和故障排除。
  4. 使用Zipkin和Sleuth:Zipkin是一个开源的分布式跟踪系统,而Sleuth则是一个Spring Cloud项目,为分布式追踪提供了集成支持。将Zipkin和Sleuth与Spring Boot微服务集成,可以跟踪请求的流程,并分析每个微服务的性能和耗时情况。

以上是一些常见的监视Spring Boot微服务的方法,根据具体需求和场景选择合适的工具和方案。

7.Spring Boot 实现实现全局异常#

在Spring Boot中,可以通过以下步骤来实现全局异常处理:

  1. 创建一个自定义的异常类,继承自RuntimeException或其子类。例如,定义一个名为CustomException的异常类:

    public class CustomException extends RuntimeException {
        // 构造方法省略
    }
    
  2. 创建一个异常处理器类,用于处理应用程序中抛出的所有异常。该类需要使用@ControllerAdvice注解,指定要处理的异常类型。例如,创建一个名为GlobalExceptionHandler的异常处理器类:

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(CustomException.class)
        public ResponseEntity<String> handleCustomException(CustomException ex) {
            // 处理CustomException异常
            return new ResponseEntity<>("CustomException occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    
        @ExceptionHandler(Exception.class)
        public ResponseEntity<String> handleAllExceptions(Exception ex) {
            // 处理所有异常
            return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
    
  3. 启用全局异常处理器。可以在启动类上添加@EnableWebMvc注解,或在配置类中添加@Bean注解来启用全局异常处理器。例如,在启动类上添加@EnableWebMvc注解:

    @SpringBootApplication
    @EnableWebMvc
    public class MyApp {
        // 程序入口省略
    }
    
  4. 在控制器中抛出自定义异常。例如:

    @RestController
    public class MyController {
    
        @GetMapping("/hello")
        public String hello() {
            throw new CustomException("Hello, Exception!");
        }
    }
    

以上是使用Spring Boot实现全局异常处理的基本步骤。通过这种方式,可以统一处理应用程序中可能出现的异常,并返回用户友好的错误信息。

8.SpringBoot性能如何优化#

  1. 减少启动时间:可以通过禁用不必要的自动配置、关闭DevTools和JVM参数调优等方式来减少应用程序的启动时间。
  2. 优化数据库访问:可以使用缓存、分页查询、批量更新等方式来优化数据库访问,提高数据读写效率。
  3. 使用异步编程模型:异步编程可以提高应用程序的吞吐量和响应速度。可以使用Spring框架中的异步特性(如@Async注解)或Reactor库来实现异步编程模型。
  4. 使用缓存:使用缓存可以避免重复计算和IO操作,提高应用程序的性能。可以使用Spring Cache抽象层来实现缓存功能。
  5. 避免过度依赖:过度依赖其他组件和库可能会导致代码冗余和性能下降。可以尽量避免过度依赖其他组件和库,只引入必要的依赖。
  6. 使用合适的日志级别:使用合适的日志级别可以避免产生过多的日志信息,降低应用程序的开销。
  7. 避免频繁的对象创建和垃圾回收:频繁的对象创建和垃圾回收可能会导致性能下降。可以使用对象池、避免在循环中创建对象等方式来减少对象创建和垃圾回收次数。

9.springboot 如何实现自定义starter#

Spring Boot 允许您创建自定义 Starter 来封装您的应用程序或库,使其更容易在其他 Spring Boot 项目中重用。

要创建自定义 Starter,请执行以下步骤:

  1. 创建一个 Maven 或 Gradle 项目。
  2. spring-boot-starter-parent 作为父项目,并添加 spring-boot-starter-dependencies 依赖项管理器,以确保 Starter 可以与其他 Spring Boot 应用程序一起使用。
  3. 在该项目中编写代码并定义必要的配置属性和 Bean。
  4. src/main/resources/META-INF/spring.factories 中声明自己的 org.springframework.boot.autoconfigure.EnableAutoConfiguration 实现类以启用自动配置。
  5. (可选)如果需要,可以将 Starter 发布到 Maven 中央仓库。

完成这些步骤后,您的 Starter 就可以像其他任何 Spring Boot Starter 一样在应用程序中使用。

10.SpringBoot微服务中如何实现 session 共享#

  1. 使用 Spring Session:Spring Session 提供了一个用于在不同的 Servlet 容器(如 Tomcat、Jetty 等)之间共享 HttpSession 的解决方案。您可以将 Spring Session 集成到微服务架构中,以便允许多个服务使用相同的 HttpSession。
  2. 使用 Redis 实现 HttpSession 共享:您可以使用 Spring Data Redis 或 Jedis 等 Redis 客户端库来实现将 HttpSession 存储在 Redis 中。这样,不同的微服务实例可以从 Redis 中获取相同的 HttpSession 数据,从而实现 HttpSession 共享。
  3. 使用 JWT Token:由于 RESTful API 是无状态的,因此使用 JWT (JSON Web Token) 可以避免进行任何会话管理。当用户登录时,服务器将生成 JWT Token 并返回给客户端,客户端应该将其保存在本地存储或 Cookie 中。然后在每个请求中将该 token 发送到服务器,服务器将对其进行验证,并根据其中包含的信息对用户进行身份验证。由于 JWT 无需存储在服务器上,因此它适用于高度可扩展的微服务体系结构。
posted @ 2023-03-10 16:44  糯米๓  阅读(11)  评论(0编辑  收藏  举报
努力加载评论中...
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示