1. 为什么要用SpringBoot
    • 因为SpringBoot的优点非常多
      1. 独立运行:SpringBoot内嵌了各种servlet容器,如Tomcat、Jetty等,现在不再需要打成war包部署到容器中,SpringBoot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内
      2. 简化配置:SpringBoot提供了很多starter依赖,可以快速集成其他框架和组件,大大简化了配置过程。
      3. 自动配置:SpringBoot的自动配置非常强大,可以根据类路径下的jar包、类文件和注解来自动配置bean,减少了手动配置的工作量。
      4. 无代码生成和XML配置:SpringBoot使用条件注解和自动配置来完成所有的配置工作,避免了代码生成和繁琐的XML配置文件,让开发更加简洁、清晰。
      5. 应用监控:SpringBoot提供了很多有用的端点和指标,可以用来监控和管理应用程序,包括健康检查、性能监控、日志查看等。此外,SpringBoot还可以与Actuator集成,提供更加丰富的监控功能。
  2. SpringBoot的核心注解是哪个?它主要由哪几个注解组成的
    • SpringBoot的核心注解是@SpringBootApplication,它主要是由三个注解组成,分别是
      1. @Configuration:声明当前类是一个配置类
      2. @EnableAutoConfiguration:开启SpringBoot的自动配置功能
      3. @ComponentScan:开启组件扫描,会自动扫描当前包及其子包下的所有类,并注册为Spring的Bean
    • 这三个注解组合在一起,可以让SpringBoot自动配置并启动应用程序。除此之外,SpringBoot还有很多其他注解,如@RestController@Service@Repository等,它们可以帮助我们更方便地创建控制器、服务层、数据访问层等组件
  3. 运行SpringBoot应用程序有哪几种方式
    • 运行SpringBoot应用程序有以下几种方式
      1. 在IDE中运行:在集成开发环境(IDE)中,可以通过直接运行应用程序的主类来启动SpringBoot程序(main方法)
      2. 打包成可执行JAR包运行:SpringBoot提供了一种将应用程序打包成可执行的JAR包的方式,例如使用Maven插件,可以轻松将应用程序打包成一个单独的JAR文件,然后在命令行中运行该JAR文件即可启动应用程序
        1
        java -jar xxx.jar
      3. 在容器中运行:可以将SpringBoot应用程序部署到Web容器中,如Tomcat、Jetty等,然后启动容器即可运行应用程序。在部署时需要将应用程序打成WAR包,并将WAR包部署到相应的容器中
  4. 如何理解SpringBoot中的starters
    • SpringBoot中的staters(启动器)是一种依赖管理的方式,它是一组预定义的依赖关系,可以方便地将常用的依赖库和框架引入到项目中。使用starters可以避免在pom.xml中一个一个引入依赖的麻烦,检查依赖管理的过程。(就好比你去steam的创意工坊找mod,一个一个找也太麻烦了,此时你就可以选择找一个常用mod合集)
  5. 如何在SpringBoot启动时运行一些特定的代码
    • 在SpringBoot启动时,可以通过实现ApplicationRunnerCommandLineRunner接口来运行一些特定的代码。这两个接口都是SpringBoot提供的回调接口,它们的作用是在SpringBoot应用程序启动完成之后,自动回调其中的run方法。在这个方法中可以编写一些初始化代码,如加载配置文件、初始化缓存等
      • ApplicationRunner接口的run方法中传入了一个ApplicationArguments对象,可以用来获取命令行参数和选项等信息
      • CommandLineRunner接口的run方法中传入一个String数组,可以用来获取命令行参数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;

    @Component
    public class MyRunner implements ApplicationRunner, CommandLineRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
    // 在此编写初始化代码,可以使用args获取命令行参数和选项等信息
    }

    @Override
    public void run(String... args) throws Exception {
    // 在此编写初始化代码,可以使用args获取命令行参数
    }
    }
    • 例如在上述代码中,MyRunner类实现了ApplicationRunnerCommandLineRunner接口,并重写了他们的run()方法,在这里可以编写一些初始化代码。同时MyRunner类使用@Component注解,表示它是一个Spring的组件,可以被自动扫描并注册到Spring容器中。当SpringBoot应用程序启动时,run()方法会被自动回调,从而执行其中的代码
  6. SpringBoot需要独立的容器运行吗
    • 不需要。SpringBoot应用程序已经被打包成可执行的jar文件,可以独立完成,不需要外部容器。在启动应用程序时,SpringBoot会内嵌一个Tomcat、Jetty或Undertow等Servlet容器,从而可以直接运行Web应用程序,而不需要单独安装和配置外部的Servlet容器。这种方式成为嵌入式Servlet容器
    • 当然,如果需要在生产环境中部署SpringBoot应用程序,可以将其打包成war包,然后部署到外部的Servlet容器中,如Tomcat、Jetty、WebSphere等,但这种部署方式失去了SpringBoot嵌入式容器的优势
  7. SpringBoot中的监视器是什么
    • SpringBoot中的监视器(monitor)是一个内置的功能,它可以让开发者实时监控应用程序的运行状况和性能指标。监视器是基于SpringBootActuator模块实现的,可以通过HTTP接口或JMX访问
    • 监视器可以提供一下几个功能
      1. 健康检查:通过访问/actuator/health接口,可以获取应用程序的健康状况。如果应用程序正常运行,会返回一个HTTP 200 OK响应;如果应用程序异常,会返回一个HTTP 503 Service Unavailable响应
      2. 指标监控:通过访问/actuator/metrics接口,可以获取应用程序的各种指标,如内存使用情况、CPU占用率、HTTP请求数等
      3. 环境信息:通过访问/actuator/env接口,可以获取应用程序的环境信息,如操作系统、Java版本、系统属性等
      4. 配置信息:通过访问/actuator/configprops接口,可以获取应用程序的配置信息,包括SpringBoot自动配置的所有Bean和其属性
      5. 执行器端点:除了以上几个端点,SpringBoot还提供了一系列执行器端点,可以访问应用程序内部状态和功能,如/actuator/beans/actuator/mappings/actuator/trace
    • 监视器功能可以通过在pom.xml文件中引入spring-boot-starter-actuator依赖实现,该依赖会自动配置Actuator模块,并启用所有的端点。可以通过配置文件或@Endpoint注解对端点进行自定义配置
  8. 如何使用SpringBoot实现异常处理
    • 在SpringBoot中,可以使用@ControllerAdvice注解定义一个全局异常处理器,来统一处理应用程序中的异常,具体实现步骤如下
      1. 定义一个异常处理类,并使用@ControllerAdvice注解来标注,例如
        1
        2
        3
        4
        5
        6
        7
        8
        @ControllerAdvice
        public class GlobalExceptionHandler {

        @ExceptionHanlder(value = Exception.class)
        public ResponseEntity<String> handleException(Exception e){
        // 处理异常,并返回合适的HTTP响应
        }
        }
      2. 在处理方法中定义@ExceptionHandler注解,指定需要处理的异常类型。可以使用多个@ExceptionHandler注解定义不同的处理方法来处理不同类型的异常
      3. 处理异常,并返回合适的HTTP响应,可以返回一个自定义的错误信息、一个HTTP错误码,或者其他合适的响应
  9. SpringBoot中常用的starter有哪些
    1. spring-boot-starter-web:用于构建Web应用程序,包括Spring MVC、Tomcat容器等。
    2. spring-boot-starter-data-jpa:用于使用JPA和Hibernate进行持久化操作。
    3. spring-boot-starter-data-redis:用于使用Redis进行数据缓存和持久化操作。
    4. spring-boot-starter-security:用于构建安全的Web应用程序,包括Spring Security、OAuth2等。
    5. spring-boot-starter-actuator:用于监视应用程序的运行状况和性能指标,包括健康检查、指标监控、环境信息、配置信息等。
    6. spring-boot-starter-test:用于构建测试应用程序,包括JUnit、Mockito、Hamcrest等。
    7. spring-boot-starter-log4j2:用于使用Log4j2进行日志记录。
    8. spring-boot-starter-logging:用于使用SLF4J和Logback进行日志记录。
    9. spring-boot-starter-amqp:用于使用AMQP进行消息队列和消息总线操作。
  10. SpringBoot实现热部署有哪几种方式
    • 在SpringBoot中,可以通过以下几种方式来实现热部署
      1. 使用SpringBoot DevToolsSpringBoot DevTools提供了许多开发工具,包括自动重启、热部署等功能。只需将spring-boot-devtools依赖添加到项目中即可启用该功能
      2. 使用Spring LoadedSpring Loaded是一个轻量级的Java类热部署工具,可以让开发者在不停止和重新启动应用程序的情况下更新Java类,只需将spring-loaded依赖添加到项目中即可启用该功能
      3. 使用JRebelJRebel是一款商业化的Java类热部署工具,需要将JRebel插件集成到开发环境中才能使用
  11. 如何理解SpringBoot配置加载顺序
    • 在Spring Boot中,配置文件的加载顺序是非常重要的,不同的加载顺序可以对应不同的配置场景。Spring Boot的配置加载顺序如下:

      1. 命令行参数:Spring Boot可以通过命令行参数来动态地修改配置。例如,可以使用--server.port=8080来指定应用程序的端口号。

      2. Java系统属性:可以通过-D参数设置Java系统属性,这些属性可以在Spring Boot应用程序中直接使用。例如,可以使用-Dapp.version=1.0.0来设置应用程序版本号。

      3. OS环境变量:Spring Boot可以读取操作系统的环境变量,这些环境变量可以在应用程序中直接使用。例如,可以使用export APP_NAME=myapp来设置应用程序名称。

      4. application.propertiesapplication.yml文件:Spring Boot会自动加载application.properties或application.yml文件中的配置。其中,application.properties文件使用key=value的格式,application.yml文件使用YAML格式。这些配置文件可以放置在src/main/resources目录下或classpath的根目录下。

      5. 指定的配置文件:可以通过spring.config.namespring.config.location属性来指定要加载的配置文件。例如,可以使用--spring.config.name=myconfig--spring.config.location=/etc/myapp/来加载指定的配置文件。

      6. 通过@ConfigurationProperties注解加载配置:可以使用@ConfigurationProperties注解来将配置文件中的属性映射到Java类中。

  12. SpringBoot的核心配置文件有哪几个?他们的区别是什么
    • 在SpringBoot中,有以下两种核心配置文件
      1. application.yml:这是SpringBoot应用程序的主要配置文件,其中包含了应用程序中的各种配置属性,如数据库连接、端口号等
      2. bootstrap.yml:它的主要应用场景是当应用程序需要连接到外部服务时,可以将连接属性(如用户名、密码、端口等)配置在bootstrap文件中,以便在应用程序启动时就能够加载这些属性。这样做可以避免将敏感信息直接暴露在应用程序的配置文件中,提高应用程序的安全性。例如我们使用SpringCloud Config作为应用程序的配置服务器,那么我们需要在bootstrap中配置如下属性
        1
        2
        3
        4
        5
        6
        spring:
        cloud:
        config:
        uri: http://localhost:8888
        username: user
        password: password
        • 这些属性将在应用程序启动时加载,并用于与配置服务器进行通信,以获取应用程序的配置信息。由于这些属性是保存在bootstrap文件中的,因此可以避免在应用程序配置文件中直接暴露这些属性。
  13. 如何集成SpringBoot和ActiveMQ
    • 要集成SpringBoot和ActiveMQ,需要进行以下步骤
      1. 添加ActiveMQ依赖,在SpringBoot项目的pom.xml文件中添加如下依赖
        1
        2
        3
        4
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
      2. 配置ActiveMQ连接,在application.yml中配置ActiveMQ的连接信息,例如
        1
        2
        3
        4
        5
        spring:
        activemq:
        broker-url: tcp://localhost:61616
        user: admin
        password: admin
      3. 创建JMS消息队列或主题:可以使用@Bean注解创建Queue或Topic对象,例如
        1
        2
        3
        4
        @Bean
        public Queue myQueue() {
        return new ActiveMQQueue("my-queue");
        }
      4. 发送和接收JMS消息:可以使用JmsTemplate来发送和接收JMS消息,例如
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        @Autowired
        private JmsTemplate jmsTemplate;

        public void sendMessage(String message) {
        jmsTemplate.convertAndSend("my-queue", message);
        }

        @JmsListener(destination = "my-queue")
        public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
        }