目录
为什么要使用SpringBoot
- 简化配置,SpringBoot的核心思想就是约定大于配置,省去xml配置
- 简化部署,内置Tomcat,可以快速启动应用,以jar包的形式
- 简化依赖,开发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有哪几种方式(很偏)
- main启动
- mvn install打成jar后 java -jar的方式运行
- 使用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.csdn.net/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.csdn.net/article/details/108630781
SpringBoot的核心配置文件有哪些?
- application主要用于Springboot自动化配置文件
- bootstarp:由ApplicationContext加载,优先级比application高
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息