- 什么是Spring Boot?
Spring Boot是在Spring的基础之上产生的(确切的说是在Spring4.0的版本的基础之上),其中“Boot”的意思就是“引导”,意在简化开发模式,是开发者能够快速的开发出基于Spring的应用。Spring Boot含有一个内嵌的web容器。我们开发的web应用不需要作为war包部署到web容器中,而是作为一个jar包,在启动时根据web服务器的配置进行加载。
- 在没有使用Spring Boot开发时项目时什么样的?
- 在项目中存在大量的xml文件,配置相当繁琐
- 整合第三方框架时的配置问题
- 低效的开发效率与部署效率问题
- Spring Boot解决了什么?
- Spring Boot使配置简单
- Spring Boot使编码加单
- Spring Boot使部署简单
- Spring Boot使监控简单
- Spring Boot快速构建项目
- 打开Spring Boot的官网
https://projects.spring.io/spring-boot/
https://start.spring.io/ 构建Spring Boot的页面
- 使用Spring Boot官网构建项目
- 会自动的帮助我们生成启动类
- 会自动生成存放静态资源的目录,还会生成全局配置文件
- 会自动生成测试代码,当然只是的一个结构。
- Spring Boot官方推荐的jdk版本为1.8或者更高
- 构建项目目录结构
- Spring Boot全局配置文件讲解
- 修改内嵌容器的端口号
server.port=8888 |
- 自定义属性配置
msg=Hello World |
@Value("${msg}") private String msg; |
- 配置变量引用
hello=bjsxt msg=Hello World ${hello} |
@Value("${msg}") private String msg; |
- 随机值配置
- 配置随机值
num=${random.int} msg=Hello World ${num} |
@Value("${msg}") private String msg; |
用处:配置随机值,在程序中如果有一些运算需要一个随机值,那么可以使用该方式来生成。注意,只生成一次。
-
- 配置随机端口
server.port=${random.int[1024,9999]} |
用处:在SpringCloud的微服务中,我们是不需要记录IP与端口号的。那么我们也就不需要去维护服务的端口号。让他随机生成就可以了。
- yml配置文件
是Spring Boot中新增的一种配置文件格式。特点:具备天然的树状结构
- yml配置文件与properties文件的区别
- 配置文件的扩展名有变化
- 配置文件中的语法有变化
- yml配置文件的语法
- 在properties文件中是以“.”进行分割,在yml中使用“:”进行分割
- yml的数据格式和json的格式很像,都是K-V结构的。并且是通过“:”赋值
- 在yml中缩进一定不能使用TAB件,否则会报错。
- 每个K的冒号后面一定要加一个空格
- logback日志记录讲解
- 导入相关的jar包
- 添加logback.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="${catalina.base}/logs/" /> <!-- 控制台输出 --> <appender name="Stdout" class="ch.qos.logback.core.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.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/server.%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.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <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.qos.logback.core.db.DriverManagerConnectionSource"> 连接池 <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <driverClass>com.mysql.jdbc.Driver</driverClass> <url>jdbc:mysql://127.0.0.1:3306/databaseName</url> <user>root</user> <password>root</password> </dataSource> </connectionSource> </appender> -->
</configuration> |
- Spring Boot的配置文件 - 多环境配置
profile:代表的就是一个环境变量
语法结构:application-{profile}.properties
- 需求:
application-dev.properties 开发环境
application-test.properteis 测试环境
application-prod.properteis 生产环境
- 运行项目:
java -jar xxx.jar --spring.profiles.active={profile}
- 完成的命令:
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 {
@ResponseBody @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; }
@ResponseBody @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; }
@ResponseBody @ExceptionHandler(value=com.bjsxt.springboothelloworld.exception.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的健康状况
- 使用Actuator检查与监控的步骤
- 在pom文件中添加Actuator的坐标
- 在全局配置文件中设置关闭安全限制
ID | 描述 | 是否需要鉴权 |
actuator | 为其他端点提供“发现页面”。要求Spring HATEOAS在classpath路径上。 | 需要 |
auditevents | 陈列当前应用程序的审计事件信息。 | 需要 |
autoconfig | 展示自动配置信息并且显示所有自动配置候选人以及他们“被不被”应用的原因。 | 需要 |
beans | 显示应用程序中所有Spring bean的完整列表。 | 需要 |
configprops | 显示所有配置信息。 | 需要 |
dump | dump所有线程。 | 需要 |
env | 陈列所有的环境变量。 | 需要 |
flyway | Shows any Flyway database migrations that have been applied. | 需要 |
health | 显示应用程序运行状况信息 | 不需要 |
info | 显示应用信息。 | 不需要 |
loggers | 显示和修改应用程序中的loggers配置。 | 需要 |
liquibase | 显示已经应用的任何Liquibase数据库迁移。 | 需要 |
metrics | 显示当前应用程序的“指标”信息。 | 需要 |
mappings | 显示所有@RequestMapping的url整理列表。 | 需要 |
shutdown | 关闭应用(默认情况下不启用)。 | 需要 |
trace | 显示跟踪信息(默认最后100个HTTP请求)。 | 需要 |
- 使用可视化的监控报表-Spring Boot Admin
- 使用Spring Boot Admin的步骤
- 搭建服务端
- 使用Spring Boot Admin的步骤
服务端其实也是一个SpringBoot项目
-
-
-
- 创建项目
-
-
-
-
-
- 访问Spring Boot Admin的首页
-
-
https://github.com/codecentric/spring-boot-admin
修改pom文件添加Spring Boot Admin 坐标
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>1.5.7</version> </dependency> |
-
-
-
- 修改启动类,添加@EnableAdminServer
-
-
@SpringBootApplication @EnableAdminServer public class SpringbootServerApplication {
public static void main(String[] args) { SpringApplication.run(SpringbootServerApplication.class, args); } } |
-
-
- 搭建客户端
-
其实客户端就是我们需要监控的工程。
-
-
-
- 修改客户端的pom文件添加依赖
-
-
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>1.5.7</version> </dependency> |
-
-
-
- 修改客户端的application.properteis配置文件
-
-
management.security.enabled=false #http://localhost:9090 表示是Spring Boot Admin 服务单的IP地址以及端口号 spring.boot.admin.url: http://localhost:9090 |