【八股文】SpringBoot篇

为什么要使用SpringBoot

  1. 简化配置,SpringBoot的核心思想就是约定大于配置,省去xml配置
  2. 简化部署,内置Tomcat,可以快速启动应用,以jar包的形式
  3. 简化依赖,开发web应用,我们只需要在pom文件中添加如下一个 starter-web 依赖即可
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Springboot的核心注解是哪个?它主要由哪几个注解组成

@SpringBootApplication主要有三部分组成:

  • @SpringBootConfiguration:声明当前类是SpringBoot应用的配置类,这个注解里面包括了@Configuration注解(全村就一个,其他注解都用@Configuration来修饰)
  • @EnableAutoConfiguration:开启自动配置
  • @ComponentScan:扫描Spring组件,通过basePackageClasses或者basePackages属性来指定要扫描包的路径,没有指定的话,就扫描当前包以及子包
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

运行springboot有哪几种方式(很偏)

  1. main启动
  2. mvn install打成jar后 java -jar的方式运行
  3. 使用maven插件:mvn spring-boot:run运行

如何理解springboot中的starters,常用的有哪些?

stater机制帮我们完成了项目启动所需要的的相关jar包,不用去一个个找jar包pom了,一键式。
比如说我想使用mybatis,直接在pom文件中加mybatis-spring-boot-starter就可以了,非常方便

常用的starter

  • spring-boot-starter-web 嵌入tomcat和web开发的支持
  • spring-boot-starter-data-jpa 数据库支持
  • spring-boot-starter-data-redis redis数据库支持
  • mybatis-spring-boot-starter 第三方的mybatis集成starter

如何在SpringBoot启动的时候运行一些特定的代码?

可以实现接口ApplicationRunner或者CommandLineRunner,两个接口都一样,实现run方法就可以

Springboot需要独立的容器运行吗

不需要,因为在springboot工程发布的jar文件里已经包含了tomcat的jar文件。springboot运行的时候,会创建tomcat对象,实现web服务功能。也可以将springboot发布成war文件,放到tomcat里运行。

Spring Boot 中的监视器是什么?(不太理解)

Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。

如何使用Springboot实现异常处理

  • 在Controller方法中使用 @ExceptionHandler 处理局部异常
@Controller
public class ExceptionController {
	
	private static final Logger log = LoggerFactory.getLogger(ExceptionController.class);
	
	@RequestMapping("/exceptionMethod")
	public String exceptionMethod(Model model) throws Exception {
		
		model.addAttribute("msg", "没有抛出异常");
		
		int num = 1/0;
		log.info(String.valueOf(num));
		
		return "home";
	}
	
	/**
	 * 描述:捕获 ExceptionController 中的 ArithmeticException 异常
	 * @param model 将Model对象注入到方法中
	 * @param e 将产生异常对象注入到方法中
	 * @return 指定错误页面
	 */
	@ExceptionHandler(value = {ArithmeticException.class})
	public String arithmeticExceptionHandle(Model model, Exception e) {
		
		model.addAttribute("msg", "@ExceptionHandler" + e.getMessage());
		log.info(e.getMessage());
		
		return "error";
	}
}

缺点:局部,这个controller外的异常无法处理

  • 使用@ControllerAdvice + @ExceptionHandler 注解处理全局异常(开发中常用)
@Configuration
public class GlobalException {
	
	@Bean
	public SimpleMappingExceptionResolver
		getSimpleMappingExceptionResolver(){
		SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
		
		Properties mappings = new Properties();
		/*
		 * 参数一:异常的类型,注意必须是异常类型的全名
		 * 参数二:视图名称
		 */
		mappings.put("java.lang.ArithmeticException", "errors");
		
		//设置异常与视图映射信息的
		resolver.setExceptionMappings(mappings);
		
		return resolver;
	}
}
  • 配置 SimpleMappingExceptionResolver 类处理异常(中文:简单映射异常解析器)
@Configuration
public class GlobalException {
	
	@Bean
	public SimpleMappingExceptionResolver
		getSimpleMappingExceptionResolver(){
		SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
		
		Properties mappings = new Properties();
		/*
		 * 参数一:异常的类型,注意必须是异常类型的全名
		 * 参数二:视图名称
		 */
		mappings.put("java.lang.ArithmeticException", "errors");
		
		//设置异常与视图映射信息的
		resolver.setExceptionMappings(mappings);
		
		return resolver;
	}
}
  • 实现 HandlerExceptionResolver 接口处理异常(中文:处理异常解析器接口)
@Configuration
public class HandlerExceptionResolverImpl implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception ex) {
		ModelAndView modelAndView = new ModelAndView();
		
		modelAndView.addObject("msg", "实现 HandlerExceptionResolver 接口处理异常");
		
		//判断不同异常类型,做不同视图跳转
		if(ex instanceof ArithmeticException){
			modelAndView.setViewName("error");
		}
		
		return modelAndView;
	}
	
}

原文链接:https://blog.youkuaiyun.com/qq_24598601/article/details/89243914

Springboot实现热部署的几种方式

  • Spring-boot-devtools(常用)
  • Spring Loaded

原理:使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间

Springboot配置文件的加载顺序

在这里插入图片描述
如果在不同的目录中存在多个配置文件,它的读取顺序是:

1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml

注意:
1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1次读取到的,后面读取的不覆盖前面读取到的。
3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”

原文地址:https://riemann.blog.youkuaiyun.com/article/details/108630781

SpringBoot的核心配置文件有哪些?

  • application主要用于Springboot自动化配置文件
  • bootstarp:由ApplicationContext加载,优先级比application高
    使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息

SpringBoot的自动装配原理?

SpringBoot的启动流程

回答: SpringBoot是一个开源的Java开发框架,它简化了Spring应用程序的配置和部署过程。它的优点包括快速开发、简化配置、内嵌服务器、自动装配等。[1]SpringBoot的核心注解是@SpringBootApplication,它是一个组合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan。@Configuration用于定义配置类,@EnableAutoConfiguration用于自动配置Spring应用程序的配置,@ComponentScan用于扫描并加载Spring组件。[2]SpringBoot的自动装配原理是通过@EnableAutoConfiguration注解和Spring Boot的自动配置机制实现的。它会根据项目的依赖和配置文件的内容自动配置Spring应用程序。[1]SpringBoot可以使用XML配置,但它更推荐使用注解配置。[1]SpringBoot的核心配置文件是application.properties或application.yml,它用于配置Spring应用程序的属性。Bootstrap.properties是Spring Boot的启动配置文件,用于配置Spring Boot的启动参数。它们的区别在于作用范围和配置方式的不同。[1]Spring Profiles是Spring框架中的一个特性,它允许根据不同的环境配置来加载不同的配置文件。它可以用来实现不同环境下的不同配置,例如开发环境、测试环境和生产环境。[1]Spring Security和Shiro是两个常用的安全框架,它们各自有优点和缺点。Spring Security是基于Spring框架的安全框架,它提供了丰富的安全功能和灵活的配置选项,但配置复杂。Shiro是一个简单易用的安全框架,它提供了简单的API和易于理解的配置选项,但功能相对较少。[1]SpringBoot可以通过配置跨域过滤器来解决跨域问题。[1]spring-boot-starter-parent是Spring Boot项目的父项目,它提供了一些默认的配置和依赖管理。它的作用是简化项目的配置和管理。[2]SpringBoot打成的jar和普通的jar的区别在于SpringBoot的jar包中包含了内嵌的服务器和应用程序的依赖,可以直接运行。普通的jar包需要手动配置服务器和依赖。[1]运行SpringBoot应用程序有多种方式,包括使用命令行运行、使用IDE运行、使用Maven插件运行等。[1]SpringBoot不需要独立的容器运行,它内嵌了Tomcat、Jetty或Undertow等服务器,可以直接运行。[1]在SpringBoot中,可以使用@ControllerAdvice注解和@ExceptionHandler注解来实现异常处理。[3]在微服务中,可以使用Spring Session来实现session共享。[1]SpringBoot可以使用@Scheduled注解来实现定时任务。[1]SpringBoot的启动原理是通过@SpringBootApplication注解和Spring Boot的自动配置机制实现的。它会自动扫描并加载Spring组件,并根据配置文件的内容自动配置Spring应用程序。[1]接口的幂等性校验可以通过使用SpringBoot的注解和拦截器来实现。[1]唯一索引锁可以通过数据库的唯一索引和事务锁来实现。[1]Token机制可以通过使用Spring Security或其他安全框架来实现。[1]尽管SpringBoot提供了很多便利的功能,但它并不是完全替代SpringCloud的。SpringCloud提供了更多的分布式系统开发的支持,包括服务注册与发现、负载均衡、断路器、配置中心等。[1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值