文章目录
照着演讲资料的去写的简单易懂,同时兼顾技术文档的条理性和深入性。
spring是一个单纯的java开发框架,spring-boot是把脚手架也做了进去,构建、打包和不同层面模块的集成,都做了更好的优化。
文档写的非常好。
1. Overview
2. Getting started
what,how and why have the Spring boot。
2.1 spring boot 是什么
使创建一个独立部署,产品级的spring-based的应用更容易。
目的
- 对于Spring的开发者,提供更快和更广泛的开始
- 开箱即用,但是又可以对变化的需求快速的响应
- 为项目提供大量且广泛的非功能性需求(内嵌的servers,安全,metric,health checks 和扩展性配置)
- 绝对没有代码生成和不需要xml配置
2.2 系统需求
System Requirements
2.2.1 Servlet Containers
2.3 安装Spring boot
要求JDK 8+
2.3.1 安装基础软件
maven
maven 3.3+ ,idea直接解决
gradle
2.3.2 Spring Boot CLI 安装
2.3.3 Spring boot版本的升级
旧版本的升级。
2.4 开发第一个Spring boot应用(傻瓜式不讲解)
关注点在于基础pom的作用
2.4.1 创建pom
2.4.2 添加依赖
Starters
Spring boot提供很多"Starters",让你去把jar添到classpath。使用spring-boot-starter-parent
去做冒烟测试。
同时spring-boot-starter-parent
也会提供有用的Maven默认设置。
比如这会用一个spring-boot-starter-web
。
写几行代码 code
@RestController
相当于@Controller + @ResponseBody。@ResponseBody就是把返回值序列化成字符串。
@EnableAutoConfiguration
会猜测你的配置比如spring-boot-starter-web
就会猜你要开启Spring MVC和Tomcat,它会初始化一系列的bean。
auto-configuration被设计来和"Starters"一起工作,但是两个概念没有强绑。你可以自有的选择在starters之外的jar包,Spring Boot 也会做最好的自动配置。
运行 run
maven 命令去执行
打包 jar(fat jar的由来)
我们的例子依赖着包含着容器的jar文件(意味值包含依赖)。执行的jar包有时候会被称为"fat jars",它会包含你运行时的所有依赖。
Executable jars和Java
java本身不能提供一个标准的方式去内嵌依赖的jar文件。当你想要发布一个容器的应用的时候,可能会有问题(没依赖)。
解决的办法是很多开发者使用了uber
的jars。一个uber的jar打包了所有应用的依赖到一个独立的结构里面。这种方式的问题是很难去看到你应用里到底用了那些libraries,也会导致同名文件的覆盖。Spring Boot 会采取不同的方法让你内嵌jar包,后面会讲到。
maven插件
负责来打包,需要把这个加到pom中去
3使用 Spring Boot
这个章节告诉你使用SpringBoot的细节
3.1 构建系统
推荐你是用成熟的构建系统比如maven和Gradle,也方便去推送到maven仓库。也支持其他系统比如Ant
- maven
- grale
- ant
3.1.1 依赖管理
3.1.2 maven
使用spring-boot-starter-parent
来设定默认设置。
- Java 1.8作为默认编译级别
- UTF-8 source encoding
- 依赖管理的继承,使你不用取指定一些依赖的
version
自动获得默认的版本 - 打包阶段会有 repacke的标记
- 明智的 resource filtering
- 明智的插件管理(exec plugin,Git commit ID 和shade)
- 明智的的资源 过滤,对application.properties和application.yml
注意application.properties和application.yml接受${…}
。
maven接受@..@
占位符,你也可以使用resource.delimiter
来覆盖maven的属性。
3.1.5 Starts列表
Starter是一些列便利的依赖描述器包含在你的应用里。可以一站式获取spring的特性,甚至不需要复制粘贴或者通过简单的的code来体验。比如你想要使用Spring 和JPA来访问database,仅许哟在你的依赖里包含
spring-boot-starter-data-jpa
。
starter包含了大量你需要添加在项目里的依赖。
什么是name
所有官方的offical starter都有相似的开始spring-boot-starter-*
。这个命名结构意味着帮你用name去找到starters。
下列创建一个你自己的starter里面会介绍,第三方的starter不应该以spring-boot
开头,推荐thirdpartyproject-spring-boot-starter
3.2 结构化你的代码
好的实践
3.2.1 使用default
Package
当一个类没有packge
声明的时候,它被默认在defalut
。但是默认的package应该被避免。因为使用
@ComponentScan, @ConfigurationPropertiesScan, @EntityScan
, 或者 @SpringBootApplication
,每一个jar里面的类都会被读到。
3.2.2 定位main的应用类
我们推荐把应用的main类放在root package下。@SpringBootApplication
注解常常会替代你的主类,也会影响到你搜索路径路径包的base package。例如被和JPA一起使用时,@SpringBootApplication
注解类标注的注解,会搜索所有@Entity
。使用root package的好处是会搜索项目里所有的组件。
典型的代码结构
@SpringBootApplication标注的main
3.3 配置类
虽然可以使用xml来配置,但是推荐使用单独的@Configuration
类配置。
3.3.1 导入额外的配置类
你需要把你所有的@Configuration 都导入一个单独的类@Import
。出此外你可以使用@ComponentScan
会自动捡起所有的Spring 组件,包括@Configuration
3.3.2 Importing XML Configuration
我们推荐你用@Configuration,但是你还是可以使用@ImportResource
去加载。
3.4 Auto-configuration
这个机器企图去根据你添加的jar依赖,来自动自动配置。比如HSQLDB在你的classpath下,无需手动,Spring auto-config会自动在内存中配置好database。
你需要做的是添加@EnableAutoConfiguration
或者@SpringBootApplication
到你的一个@Configuration类上。
由于只需要添加一个
@EnableAutoConfiguration
或者@SpringBootApplication
,所以我们推荐你添加在你主要的@Configuration就可以了。
3.4.1 灰度替换 Auto-configuration
自动配置是无侵入的,但是你有时需要去用自己的配置来代替自动配置。比如你定义了DataSource
bean。默认的内嵌database就作为被封。
如果你需要去看那些自动装配被使用了,启动你的应用时附带-debug
。这样会打开debug的log
3.4.2 关掉特殊的自动装配。
使用exclude去除
如果不在classpath路径下,你可以使用excludeName
属性去匹配。
如果你不用@SpringBootApplication
而是使用@EnableAutoConfiguration
,的话,也可以使用exclude
和excludeName
。最终你也可以用
spring.autoconfigure.exclude
。
3.5 依赖注入 Spring Beans and Dependency Injection
你依旧可以使用@ComponentScan和@Autowired。
如果你的代码结构像上面介绍的那样,仅需要@ComponentScan,就可以自动注册
@Component, @Service, @Repository, @Controller
下面使用构造器的方式去初始化bean
如果一个类只有一个构造器可以省去@Autowired
注意final 意味着不能被子类改变
3.6 使用 @SpringBootApplication
Annotation
- @EnableAutoConfiguration会自动打开自动auto-configuration装置
- @ComponmentScan,会自动扫描application所在的包的所有@Compent
- @Configuration:荀彧在context里注册额外的beans,或导入额外的配置类。
没有什么东西是强制的,不想用auto-configuration和CompentScan时,你可以选择关闭掉。
3.7 启动你的应用
在你的应用中内置一个HTTP server的最大好处是,你可以随时的运行它,而不要额外的插件或者扩展。spring boot也是。
3.7.1 打开你的IDE
导入
方式一:可执行包
打成执行包使用java -jar
方式二:使用maven
mvn spring-boot run
可以用MAVEN_OPTS=-Xmx1024m
来控制maven环境变量
方式三: 热替换
spring boot只是仅仅继承了java应用和jvm热替换,开箱即用。
spring-boot-devtools
种包含了热替换
3.8 Developer Tools 开发工具
开发工具有一堆工具在开发阶段有用
引入
3.8.1 设置默认属性
3.8.2 自动重启
3.8.2 热加载
3.8.4 全局设置
3.8.5 远程应用
远程应用启动
远程更新
监控文件变动
3.9 为生产环境打包
可执行的jar,本来就是一个fat.jar,包含了需要的依赖,所以适合云环境下的部署。
对于生产环境额外的特性,比如健康检查,auditing,或者metric Rest或者JMX终端,考虑添加spring-boot-actuator
。