SpringBoot汇总

SpringBoot框架(由浅入深,深度解读
Spring的一个简单概述
cannot resolve symbol ‘springframework’
Error:(3, 32) java: 程序包org.springframework.boot不存在
如何使用IntelliJ IDEA 配置Maven

Idea中会内置tomcat

SpringBoot
1、SpringBoot特性讲解
目的:创建和启动新的基于Spring框架的项目

特点:1、为基于Spring的开发提供更快的入门体检

     2、创建可以独立运行的Spring应用

     3、直接嵌入Tomcat或者Jetty服务器,不需要打包成war文件

     4、提供推荐的基础POM文件(Starter)来简化Apache Maven配置

     5、尽可能的提供项目依赖来自动配置Spring框架

     6、提供可以直接在生产换进中使用的功能,如性能指标、应用信息和应用健康检查。

     7、开箱即用,没有代码生成,也不需要配置XML配置,同时也可以修改默认值来满足特定的需求。

     8、其他大量的醒目都是基于Spring Boot之上的,如Spring Cloud。

Spring Boot使编码、配置、部署、监控变得简单。

缺点:依赖太多,随便一个SpringBoot应用都有好几十M。

2、Redis介绍
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化。

Redis是目前业界使用最广泛的内存数据存储,Redis支持更丰富的数据结构,例如hashse,lists,sets等,同时也支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事物,HA,主从库。可以说Redis兼具了缓存系统和数据库的特性,具有丰富的应用场景。

使用:
1、 引入依赖包。

3、SpringBoot基本入门
默认的配置文件是application.properties.

4、@EnableAutoConfiguration注解
如何引用不同的项目中的Bean或者别的第三方jar下面的bean? (在pom中加入对应的依赖就可以了~)

@EnableAutoConfiguration:从classpath中搜索所有MATA-INF/spring.factories配置文件。然后将其中org.springframeword.boot.autoconfigure. EnableAutoConfiguration=Key中的Key对应的配置项加载到Spring容器。

其内部的关键点有:

1、 ImportSelector:该接口的返回值都会被纳入到Spring容器管理中。

2、 SpringFactoriesLoader:该类可以从Classpath中搜索所有META-INF/ spring.factories配置文件,并读取配置

3、 只有spring.boot. EnableAutoConfiguration = true时,才可以启动配置项

4、 @ EnableAutoConfiguration还可以进行排除,排除的方式有两种,一是根据Class来排除,二是根据class name来排除。

5、 事件监听
背景:Bean和Bean需要进行消息通信,一个Bean做完事件之后,需要发送信号通知另外一个Bean进行处理。

1、 自定义事件,一般是继承ApplicationEvent抽象类
2、 定义事件监听器,一般是实现ApplicationListener接口,实现onApplicationEven方法传入事件
3、 启动的时候,需要把监听器加入到spring容器中
4、 发布事件 ApplicationContext.publishEvent();

配置监听器:

1、 SpringApplication.addListeners添加监听器
2、 把监听器纳入到spring容器中管理
3、 使用context.Listener.classes配置项来配置。详细信息参照DelegatingApplicatinListener.
4、 使用@EventListener注解,在方法上加入@EventListener注解,并且该方法需要被纳入到Spring容器中

6、 SpringBoot
App启动之前或者启动之后要进行逻辑处理需要使用什么接口。
Banner;

SpringBoot运行流程:
1、实例化SpringApplication对象,执行run方法
2、直接调用SpringApplication的静态run方法

运行流程:
1、 判断是否是Web环境
2、 加载所有META-INF/spring.factories 中的ApplicationContextInitializer
3、 加载所有META-INF/spring.factories 中的ApplicationListener
4、 推断运行入口main方法所在的类
5、 开始执行run方法
6、 设置java.awt.headless系统变量
7、 加载所有META-INF/spring.factories 中的SpringApplicationRunListener
8、 执行所有SpringApplicationRunListener中的Start方法
9、 实例化ApplicationArguments对象
10、创建environment
11、配置environment,主要是把run方法的参数配置到environment
12、执行所有SpringApplicationRunListener的environmentPrepared方法
13、如果不是web环境,但是是web的environment,则把这个web的environment转换成标准的environment
14、输出Banner
15、初始化applicationContext,如果是web环境,则实例化AnnotationConfigEmbeddedWebApplicationContext,否则实例化AnnotationConfigEmbeddedApplicationContext
16、如果beanNameGenerator不为空,就把beanNameGenerator对象注入到context里面去
17、回调所有的ApplicationContextInitializer方法
18、执行所有SpringApplicationRunListener的contextPrepared方法
19、依次往spring容器中注入:ApplicationArguments,Banner
20、加载所有的源到context中去
21、执行所有的SpringApplicationRunListener中的contextLoaded方法
22、执行context的refresh方法,并且调用context的registerShutdownHook方法
23、回调,获取容器中所有的ApplicationRunner.CommandLineRunner接口,然后排序,依次进行调用
24、执行所有SpringApplicationRunListener的finished方法

7、 Spring Boot Web

拦截器的使用步骤:
1、 写一个拦截器,实现HandleInterceptor接口
2、 写一个类,集成WebMvcConfigurerAdapter抽象类,然后重写addInterceptors方法,并调用registry. addInterceptors把上一步的拦截加进去

HandleInterceptor

preHandle :controller执行之前调用
postHandle:controller执行之后,且页面渲染之前调用
afterCompletion:页面渲染之后调用,一般用于资源清理操作

错误处理:使用ErrorPageRegistrar方法

1、 写一个类,实现ErrorPageRegistrar接口,然后实现registerErrorPage方法,在该方法中添加具体的错误逻辑处理(类似web.xml里面配置的错误处理方式)

全局的异常处理:
1、 写一个类,需要加上@ControllerAdvice注解
2、 写一个异常处理类,方法上面需要加上ExceptionHandler(value=Exception.class或者其他具体异常)这个注解,在该方法里面处理异常

SpringBoot默认的日志级别是info
可以通过logging.level.* = debug来设置,也可以是某个类
日志级别有:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
日志级别配置成OFF表示关闭日志输出
logging.file 指定日志文件名字
logging.path 指定日志文件输出的路径目录
logging.pattern.console 在控制台输出日志的格式pattern
logging.file.console 在日志文件中输出的格式pattern
注:日志文件的输出,文件的大小在10M之后就会自动分割了

Springboot默认支持logback,也就是说,只需要在classpath下放一个logback.xml,logback-spring.xml的文件,即可定制日志的输出

使用其他的日志组件的步骤:
1、 排除掉默认的日志组件:spring-boot-starter-logging
2、 加入新的日志路径依赖
3、 把相应的配置文件加入到classpath下

SpringBoot相关的日志源码

SpringBoot的监控与度量

<!—配置spring监控与度量的依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-actuator</artifactId>
</dependency>

使用http://localhost:8080/+Mapping来进行文件的访问

1、指定除了默认配置文件之后其他的配置文件路径
@PropertySource(“classpath:my.properties”)

2.自定义健康状态监测,通过实现HealthIndicator接口,使用Health类静态方法down up 等。

3.度量
CounterService 用来计数的服务,可以直接使用 @Autowire
GaugeService 用来记录某个值,可以直接使用 @Autowire
gaugeService.submit(name,value) 可以给某一个变量赋值,用来统计某个值
Metric不仅可以输出到页面,还可以输出到jmx(jdk-jmx.exe),redis,Mbean浏览器,java VisualVM等地方
通过向spring容器中装配一个MetricWriter,以实现定向输出,@ExportWriter

SpringBoot测试

1、springboot会优先加载测试环境的配置文件,测试环境没有才会加载正式环境

2、通过BDDMockito进行测试的结果预测,然后在进行断言测试
BDDMockito.given(userMapper.createUser(“name”)).willReturn(Integer.valueOf(1));
Assert.assertEquals( Integer.valueOf(1),userMapper.createUser(“name”));

3、测试controller: TestRestTemplate 需要运行在web环境中
@WebMvcTest() 不需要运行在web环境下,但是需要制定controllers,表示需要测试那些controllers。这种方式只测试controller,controller里面的一些依赖,需要自己去mock

@SpringBootTest不能和@WebMvcTest同时使用,@WebMvcTest不加载整个spring容器。如果使用MockMvc对象的话,需要另外加上@AutoConfigureMockMvc注释

SpringBoot测试的例子

把原先的一个大系统拆分成几个小的系统,每个小的系统分别开发、测试和维护;微服务写完之后可以单独的运行或者被别的工具调用;

rest(http):RestTemplate,HttpClient
web service
rpc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值