1. Java开发的痛点
Xml引入不生效
调试tomcat缓存,启动慢
引用Jar容易混淆丢失,版本冲突
搭建慢
2. 入门介绍
SpringBoot是什么?为什么使用SpringBoot?
(1)Springboot 是spring的高铁,使用它你可以更快捷的使用spring的其他特性
- 创建独立Spring应用,java -jar运行
- 嵌入Tomcat jetty,而不需要部署它们,也可以使用tomcat
- 提供的“starters” poms来简化maven配置
- 尽可能自动配置spring应用
- 提供生产指标,健壮检查和外部化配置
- 绝对没有代码生成和xml配置要求
(2)Springboot 提供了丰富的Starter组件
启动Springboot的几种方式
-
启动Spring Boot项目最简单的方法就是执行下面的方法:SpringApplication.run(Application.class, args);该方法返回一个ApplicationContext对象。
-
SpringApplication application = new SpringApplication(Application.class); application.run(args);
SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。
-
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
配置文件中定义
配置加载优先级
- 命令行参数
- 来自java:comp/env的JNDI属性
- Java系统属性(System.getProperties())
- 操作系统环境变量
- RandomValuePropertySource配置的random.*属性值
- jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包外部的application.properties或application.yml(不带spring.profile)配置文件
- jar包内部的application.properties或application.yml(不带spring.profile)配置文件
- @Configuration注解类上的@PropertySource
- 通过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
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处理了
网友评论