SpringBoot简单回顾

1. Java开发的痛点

Xml引入不生效

调试tomcat缓存,启动慢

引用Jar容易混淆丢失,版本冲突

搭建慢

2. 入门介绍

SpringBoot是什么?为什么使用SpringBoot?

(1)Springboot 是spring的高铁,使用它你可以更快捷的使用spring的其他特性

  1. 创建独立Spring应用,java -jar运行
  2. 嵌入Tomcat jetty,而不需要部署它们,也可以使用tomcat
  3. 提供的“starters” poms来简化maven配置
  4. 尽可能自动配置spring应用
  5. 提供生产指标,健壮检查和外部化配置
  6. 绝对没有代码生成和xml配置要求

(2)Springboot 提供了丰富的Starter组件

启动Springboot的几种方式

  1. 启动Spring Boot项目最简单的方法就是执行下面的方法:SpringApplication.run(Application.class, args);该方法返回一个ApplicationContext对象。

  2. SpringApplication application = new SpringApplication(Application.class);
    application.run(args);
    

    SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。

  3. SpringApplicationBuilder
        new SpringApplicationBuilder()
        .showBanner(false)
        .sources(Application.class)
        .run(args);
    

    SpringApplicationBuilder包含了更多配置,如当需要使用子容器,就需要用到SpringApplicationBuilder,该类有一个child(xxx...)方法可以添加子容器

Spring容器加载前后做些事-addEvent

Spring-boot提供一些事件,顺序如下:

ApplicationStartingEvent:除了基础的注册监听和初始化之外,在开始运行时做任何处理动作之前发送

ApplicationEnvironmentPreparedEvent:在上下文中使用的环境已知,但是Context尚未创建之前发送.

ApplicationPreparedEvent: 在Spring刷新Context开始之前,而仅当加载bean定义之后发送.

ApplicationStartedEvent: 在刷新上下文之后,但在调用任何应用程序(ApplicationRunner)和命令行运行程序(CommandLineRunner)之前发送.

ApplicationReadyEvent: 在调用应用程序和命令行运行程序后发送。 它表示应用程序已准备好为请求提供服务.

ApplicationFailedEvent: 在启动过程中出现异常.

基础功能-接收启动命令

CommandLineRunner接口

如果bean在SpringApplication启动成功时,需要做一些处理,可以实现CommandLineRunner接口,可以接收启动时的命令

注:如果多个bean需要按照一定顺执行run,可以实现org.springframework.core.annotation.Order做排序

基础功能-配置

外部配置

配置文件名称默认:application.properties

@Value注入配置

@ConfigurationProperties配置绑定到对象

@ConfigurationProperties(prefix=“connection”)

匹配前缀使用prefix,并通过@EnableConfigurationProperties启用配置

外部配置 生产和开发

spring.profiles.active=dev

命令行参数:--spring.profiles.active=dev

Java系统属性:-Dspring.profiles.active=dev

配置文件中定义

配置加载优先级

  1. 命令行参数
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
  6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  10. @Configuration注解类上的@PropertySource
  11. 通过SpringApplication.setDefaultProperties指定的默认属性

配置配置文件的位置

spring会从classpath下的/config目录或者classpath的根目录查找application.properties或application.yml

/config优先于classpath根目录

基础功能-日志管理

Logging

在使用Starter POMS时,Logback作为默认日志,可以引入logback.xml

输出内容如下:

时间日期-­‐精确到毫秒.

日志级别 — ERROR,WARN, INFO, DEBUG orTRACE.

进程 ID,对应jps输出的ID.

Logback默认输出ERROR、WARN和INFO

$java -jar myapp.jar --debug开启debug日志

或者application.properties中添加debug=true,当然也可以通过xml配置

Application.properties中添加如下:

logging.level.* //作为package(包)的前缀来设置日志级别

logging.file.path=/data/log //日志保存在该目录下

logging.file.name=demo.log //按照定义日志名称保存在项目名下

默认写入10M内容将循环重写

可以根据需要对不同的包路径定义不同级别日志

在application.properties中添加

logging.level.root=WARN

logging.level.org.springframework.web=ERROR

logging.level.com.dragonsoft.demo=DEBUG

3. web应用搭建

如何添加web功能

添加starter:spring-boot-starter-web嵌入式tomcat

使用spring-mvc注解

静态资源

spring boot默认加载文件的路径是

/META-INF/resources/

/resources/

/static/

/public/

例如:在classpath下建static/css/man.css

访问http://localhost:8080/css/man.cs

Freemarker视图解析

配置application.properties

spring.freemarker.tempalte-loader-path=classpath:/templates
spring.freemarker.suffix=.ftl
# 关闭缓存,及时刷新,上线生产环境需要修改为true
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
#是否检查模板位置是否存在
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
#设定所有request的属性在merge到模板的时候,是否要都添加到model中
spring.freemarker.expose-request-attributes=true
#是否在merge模板的时候,将HttpSession属性都添加到model中
spring.freemarker.expose-session-attributes=true

Filter

访问http://localhost:8080/

4. 扩展功能介绍

JDBC

引入:spring-boot-starter-jdbc与mysql驱动pom

在application.properties中添加如下配置

spring.datasource.url=jdbc:mysql://192.168.10.20:3306/wq_test?characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

@EnableAutoConfiguration

开启自动配置

告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。

比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖

此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!

SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置

这些配置是否生效,取决于我们是否引入了对应库所需的依赖

如果有那么默认配置就会生效

我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了

@ComponentScan

配置组件扫描的指令

提供了类似与<context:component-scan>标签的作用

通过basePackageClasses或者basePackages属性来指定要扫描的包。

如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,

因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。

Condition

开启自动配置

告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。

比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖

此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!

SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置

这些配置是否生效,取决于我们是否引入了对应库所需的依赖

如果有那么默认配置就会生效

我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352