尚学堂_SpringBoot
⽬录
⼀、 Spring Boot 回顾
1 什么是 Spring Boot?
Spring Boot 是在 Spring 的基础之上产⽣的(确切的说是在 Spring4.0 的版本的基础之上),其中“Boot” 的意思就是“引导” , 意在简化开发模式, 是开发者能够快速的开发出基于Spring 的应⽤。 Spring Boot 含有⼀个内嵌的 web 容器。 我们开发的 web 应⽤不需要作为 war包部署到 web 容器中, ⽽是作为⼀个 jar 包, 在启动时根据 web 服务器的配置进⾏加载。
2 在没有使⽤ Spring Boot 开发时项⽬时什么样的?
2.1在项⽬中存在⼤量的 xml ⽂件, 配置相当繁琐
2.2整合第三⽅框架时的配置问题
2.3低效的开发效率与部署效率问题
效率与公平
3 Spring Boot 解决了什么?
3.1Spring Boot 使配置简单
3.2Spring Boot 使编码加单
3.3Spring Boot 使部署简单
3.4Spring Boot 使监控简单
⼆、 Spring Boot 快速构建项⽬
1 打开 Spring Boot 的官⽹
2 使⽤ Spring Boot 官⽹构建项⽬
2.1会⾃动的帮助我们⽣成启动类
2.2会⾃动⽣成存放静态资源的⽬录, 还会⽣成全局配置⽂件
2.3会⾃动⽣成测试代码, 当然只是的⼀个结构。
2.4Spring Boot 官⽅推荐的 jdk 版本为 1.8 或者更⾼
3 构建项⽬⽬录结构
三、 Spring Boot 全局配置⽂件讲解
1 修改内嵌容器的端⼝号
rver.port=8888
2 ⾃定义属性配置
msg=Hello World
@Value("${msg}")
private String msg;
3 配置变量引⽤
hello=bjsxt
msg=Hello World ${hello}
@Value("${msg}")
private String msg;
没关系英语4 随机值配置
4.1配置随机值
num=${random.int}
msg=Hello World ${num}
@Value("${msg}")
奔腾剃须刀广告private String msg;
⽤处: 配置随机值, 在程序中如果有⼀些运算需要⼀个随机值, 那么可以使⽤该⽅式来⽣成。 注意, 只⽣成⼀次
4.2配置随机端⼝
rver.port=${random.int[1024,9999]}
⽤处: 在 SpringCloud 的微服务中, 我们是不需要记录 IP 与端⼝号的。 那么我们也就不需要去维护服务的端⼝号。 让他随机⽣成就可以了。
四、 yml 配置⽂件
是 Spring Boot 中新增的⼀种配置⽂件格式。 特点: 具备天然的树状结构
1 yml 配置⽂件与 properties ⽂件的区别
1.1配置⽂件的扩展名有变化
1.2配置⽂件中的语法有变化
2 yml 配置⽂件的语法
2.1在 properties ⽂件中是以“.” 进⾏分割, 在 yml 中使⽤“: ”进⾏分割
2.2yml 的数据格式和 json 的格式很像, 都是 K-V 结构的。 并且是通过“: ” 赋值
2.3在 yml 中缩进⼀定不能使⽤ TAB 件, 否则会报错。
2.4每个 K 的冒号后⾯⼀定要加⼀个空格
五、 logback ⽇志记录讲解
1 导⼊相关的 jar 包
2 添加 l 配置⽂件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义⽇志⽂件的存储地址勿在 LogBack 的配置中使⽤相对路径-->
<property name="LOG_HOME"value="${catalina.ba}/logs/"/>
<!-- 控制台输出 -->
<appender name="Stdout"class="ch.ConsoleAppender">
<!-- ⽇志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度%msg:⽇志消息,%n是换⾏符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天⽣成⽇志⽂件 -->
<appender name="RollingFile"class="ch.olling.RollingFileAppender">
<rollingPolicy class="ch.olling.TimeBadRollingPolicy">
<!--⽇志⽂件输出的⽂件名-->
<FileNamePattern>${LOG_HOME}/rver.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度%msg:⽇志消息,%n是换⾏符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--⽇志⽂件最⼤的⼤⼩-->
<triggeringPolicy class="ch.olling.SizeBadTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
越南胡志明<!-- ⽇志输出级别 -->
<root level="info">
<appender-ref ref="Stdout"/>
<appender-ref ref="RollingFile"/>
</root>
<!--⽇志异步到数据库 -->
<!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
⽇志异步到数据库
分手了想挽留<connectionSource class="ch.db.DriverManagerConnectionSource">
岔子
连接池
<dataSource class="hange.v2.c3p0.ComboPooledDataSource">
<driverClass&sql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaName</url>
<ur>root</ur>
<password>root</password>
</dataSource>
</connectionSource>
</appender> -->
</configuration>
六、 Spring Boot 的配置⽂件 - 多环境配置
profile:代表的就是⼀个环境变量
语法结构: application-{profile}.properties
1 需求:
application-dev.properties 开发环境
application-test.properteis 测试环境
application-prod.properteis ⽣产环境
2 运⾏项⽬:
java -jar xxx.jar --spring.profiles.active={profile}繁星春水全文
3 完成的命令:
java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar --spring.profiles.active=test|dev|prod
七、 Spring Boot 核⼼注解讲解
@SpringBootApplication: 代表是 SpringBoot 的启动类。
@SpringBootConfiguration: 通过 bean 对象来获取配置信息
@Configuration: 通过对 bean 对象的操作替代 spring 中 xml ⽂件
@EnableAutoConfiguration: 完成⼀些初始化环境的配置。
@ComponentScan: 来完成 spring 的组件扫描。 替代之前我们在 xml ⽂件中配置组件扫描的配置<context:component-scan pacage=”…”>
松花江源头和尽头在哪
@RestController:1,表⽰⼀个 Controller。 2, 表⽰当前这个 Controller 下的所有的⽅法都会以json 格式的数据响应。
⼋、回顾 SpringBoot 异常处理:
@ControllerAdvice+@ExceptionHandler 注解处理异常
@ControllerAdvice
public class MyControllerAdvice {
@ResponBody
@ExceptionHandler(value=java.lang.Exception.class)
public Map<String, Object>myException(Exception ex){
Map<String, Object> map =new HashMap<>();
map.put("code",500);
map.put("msg","出错了。 ");
return map;
}
@ResponBody
@ExceptionHandler(value=java.lang.NullPointerException.class)
public Map<String, Object>myException2(Exception ex){
Map<String, Object> map =new HashMap<>();
map.put("code",-500);
map.put("msg","空指针异常");
return map;
}
@ResponBody
@ExceptionHandler(value=com.ption.ApplicationException.class)
public Map<String, Object>myException3(Exception ex){
Map<String, Object> map =new HashMap<>();
map.put("code",-800);
map.put("msg", ex.getMessage());
return map;
}
}
九、如何监控 Spring Boot 的健康状况
1 使⽤ Actuator 检查与监控的步骤
1.1在 pom ⽂件中添加 Actuator 的坐标
1.2在全局配置⽂件中设置关闭安全限制
2 使⽤可视化的监控报表-Spring Boot Admin
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-rver</artifactId>
<version>1.5.7</version>
</dependency>
2.1.1.3 修改启动类, 添加@EnableAdminServer
@SpringBootApplication
@EnableAdminServer
public class SpringbootServerApplication {
public static void main(String[] args){
SpringApplication.run(SpringbootServerApplication.class,args);
}
}
2.1.2搭建客户端
其实客户端就是我们需要监控的⼯程。
2.1.2.1 修改客户端的 pom ⽂件添加依赖
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.7</version>
</dependency>
2.1.2.2 修改客户端的 application.properteis 配置⽂件
abled=fal
#localhost:9090表⽰是 Spring Boot Admin 服务单的 IP 地址以及端⼝号spring.boot.admin.url: localhost:9090
2.2监控信息讲解