第一部分Spring Boot基础
第1章 Spring Boot史前简述
1.1 J2EE(Java 2 Platform Enterprise Edition)简介
1.2 Java企业级开发框架概述
1.3 Spring生态系统
1.4 Spring JavaConfig
第2章 Spring Boot简介
2.1 用Spring Boot创造一切
2.2 Spring Boot起源
2.3 Spring Boot在Spring生态中的构成
2.3.1 Spring生态顶级项目
2.3.2 Spring cloud子项目
2.4 Spring Boot核心组件
2.5 Spring Boot版本历史
2.6 Spring Boot学习成本
第3章 Spring Boot快速开始Hello World
3.1 Spring Boot CLI groovy版Hello World
3.2 常规Java版Hello World
第4章 零XML配置的Spring Boot Application
4.1 application.properties
4.2 Spring Boot属性配置和使用
4.2.1配置的优先级
4.2.2命令行参数配置
4.2.3 random.*属性配置
4.2.4属性文件配置
4.2.5 YAML格式的配置文件
4.2.6使用 Java配置类
4.3使用CommandLineRunner执行初始化加载
第5章 Spring Boot自动配置原理
5.1 Spring Boot的核心组件模块
5.2 Spring Boot Starters
5.3 @EnableAutoConfiguration自动配置原理
5.4 FreeMarkerAutoConfiguration自动配置的实例分析
5.5 spring.factories与定义应用程序的初始化行为
第二部分 Spring Boot集成
第6章 Spring Boot数据库集成
6.1 Spring Boot集成mybatis
6.2 Spring Boot集成jpa
6.3 Spring Boot集成多数据源
6.4 Spring Boot集成Druid监控数据库
6.5 Spring Boot集成mongodb开发
第7章 Spring Boot集成模板引擎
7.1 Spring Boot集成jsp模板
7.2 Spring Boot集成thymeleaf模板
7.3 Spring Boot集成velocity模板
7.4 Spring Boot集成freemarker模板
7.5 Spring Boot集成groovy模板
第8章 Spring Boot集成开发
8.1 Spring Boot集成Groovy混合Java开发
8.2 Spring Boot集成Groovy、Grails开发
8.3 Spring Boot集成Scala混合Java开发
8.4 Spring Boot集成Kotlin混合Java开发
8.5 Spring Boot集成Swagger2构建自动化Rest API文档
8.6 Spring Boot集成Spring Security
8.7 Spring Boot集成日志
8.8 Spring Boot静态资源处理
第9章 Spring Boot开发者工具
9.1 Spring Boot maven plugin
9.2 Spring Boot gradle plugin
9.3 Spring Boot热部署
9.4 Spring Boot远程调试
第10章 Spring Boot应用部署运维
10.1 Spring Boot应用运行
10.2使用Spring Cloud部署
10.3使用Docker快速部署
第11章 Spring Boot应用监控
11.1 使用Spring Boot Actuator监控应用
11.2 Spring Boot远程Shell
第12章 Spring Boot与微服务
12.1 微服务架构
12.2 使用Spring Boot创建微服务
第三部分 问题解决
第13章 常见问题与解决方案
13.1 Spring MVC 关于controller的字符编码
13.2 Spring Boot启动报错
13.3 javax.servlet.ServletException
13.4 库依赖冲突问题
13.5 org.apache.catalina.LifecycleException
13.6 @EnableMongoRepositories路径配置
13.7 Logging system failed to initialize using configuration from 'logback.xml '
13.8 java.lang.IllegalArgumentException: Request header is too large
13.9 No handler found for GET /swagger-ui.html
附录
附录A 计算机的0和1
附录B 编程的本质
附录C Java编程简史
《Springboot极简教程》
第O部分 Spring Boot简介
第1章 Spring Boot史前简述
1.1 J2EE(Java 2 Platform Enterprise Edition)简介
1.2 Java企业级开发框架概述
1.3 Spring生态系统
1.4 Spring JavaConfig
小结
参考资料
第2章 Spring Boot简史
2.1 用SpringBoot创造一切吧
2.2 SpringBoot起源
2.3 SpringBoot在整个Spring生态中
2.3.1 Spring生态顶级项目
2.3.2 Spring cloud子项目
2.4 SpringBoot核心组件
2.5 SpringBoot版本历史
2.6 SpringBoot学习成本
小结
第一部分 SpringBoot的核心
第3章 一键启动应用程序
3.1 SpringBoot版的Restful Hello,World
3.1.1 Spring Boot CLI groovy版Hello World
3.1.2 常规的Java版的Hello World
3.2 启动Springboot的自动配置@EnableAutoConfiguration
第4章 零XML配置的Springboot Application
4.1 application.properties
4.2 配置文件说明
第5章 Springboot功能模块和核心组件
第二部分 SpringBoot集成
第6章 Springboot数据库集成
6.1 Spring Boot集成mybatis
6.2 Spring Boot集成jpa
第7章 Spring Boot集成模板引擎
7.1 Spring Boot集成jsp模板
7.2 Spring Boot集成thymeleaf模板
7.3 Spring Boot集成velocity模板
7.4 Spring Boot集成freemarker模板
7.5 Spring Boot集成groovy模板
第8章 Spring Boot集成Groovy混合Java开发
第9章 Spring Boot集成Groovy,Grails开发
第10章 Spring Boot集成Scala混合Java开发
第11章 Spring Boot集成Kotlin混合Java开发
第12章 Springboot集成mongodb开发
第13章 Spring Boot集成Swagger快速构建REST API文档
第14章 Spring Boot安全集成Spring Security
第15章 Spring Boot日志集成
第16章 Spring Boot微服务和DevOps
第三部分 问题解决
常见问题&解决
Spring MVC 关于controller的字符编码
Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping for
javax.servlet.ServletException: Circular view path [login]: would dispatch back to the current handler URL [/login] again
库依赖冲突问题:Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflow
org.apache.catalina.LifecycleException: A child container failed during start
@EnableMongoRepositories路径配置:APPLICATION FAILED TO START: Parameter 0 of constructor in
Logging system failed to initialize using configuration from 'logback.xml '
第四部分 附录
附录1 计算机简史
1.0 一切皆是映射
1.1 二进制01与易经阴阳
1.2 向上抽象封装一层
1.3 编程之初:从机械计算机到能接受指令的计算机
1.3.1 机械计算机简史
1.3.2 能接受指令的计算机
小结
附录2 编程的本质
2.0 什么是编程
2.1 结构化程序设计
2.2 怎样解决问题
2.3 层次化分解与复合
2.4 面向对象编程(OOP)
2.5 函数式编程(FP)
2.6 混合式编程(HP)
小结
附录3 编程简史
1940之前
1940年代
1950与1960年代
1967-1978:确立基础范式
1980年代:增强、模块、性能
1990年代:互联网时代
当今的趋势
编程语言发展史上的杰出人物
名词纪要
参考资料
附录4 Java编程简史
从GOTO到OOP
Java简史
JVM上的语言家族
用哪种 JVM 语言?
《Springboot极简教程》大钢结构v1.0.0《Springboot极简教程》
第O部分 Spring Boot简介第1章 Spring Boot史前简述
1.1 循证架构
1.2 Java元编程
1.2.1 元编程(meta-programming)
1.3 Java主流框架概述
1.3.1 Struts
1.3.2 Hibernate
1.3.3 Spring框架
1.4 Spring生态系统
1.5 Spring JavaConfig
1.5.1 JavaConfig简介
1.5.2 JavaConfig与注解驱动配置
小结
第2章 Spring Boot简史
2.1 用SpringBoot创造一切吧
2.2 SpringBoot起源
2.3 SpringBoot在整个Spring生态中
2.3.1 Spring生态顶级项目
2.3.2 Spring cloud子项目
2.4 SpringBoot核心组件
2.5 SpringBoot版本历史
2.6 SpringBoot学习成本
小结
第一部分 SpringBoot的核心第3章 一键启动应用程序
3.1 SpringBoot版的Restful Hello,World
3.1.1 Spring Boot CLI groovy版Hello World
3.1.2 常规的Java版的Hello World
3.2 启动Springboot的自动配置@EnableAutoConfiguration
第4章 零XML配置的Springboot Application
4.1 application.properties
4.2 配置文件说明
第5章 Springboot功能模块和核心组件
第二部分 SpringBoot集成第6章 Springboot数据库集成
6.1 Spring Boot集成mybatis
6.2 Spring Boot集成jpa
第7章 Spring Boot集成模板引擎
7.1 Spring Boot集成jsp模板
7.2 Spring Boot集成thymeleaf模板
7.3 Spring Boot集成velocity模板
7.4 Spring Boot集成freemarker模板
7.5 Spring Boot集成groovy模板
第8章 Spring Boot集成Groovy,Grails开发
第9章 Spring Boot集成Scala混合Java开发
第10章 Spring Boot集成Kotlin混合Java开发
第11章 Springboot集成mongodb开发
第12章 Spring Boot集成Swagger快速构建REST API文档
第13章 Spring Boot微服务和DevOps
第三部分 问题解决常见问题&解决
第四部分 附录附录1 计算机简史
1.0 一切皆是映射
1.1 二进制01与易经阴阳
1.2 向上抽象封装一层
1.3 编程之初:从机械计算机到能接受指令的计算机
1.3.1 机械计算机简史
1.3.2 能接受指令的计算机
小结
附录2 编程的本质
2.0 什么是编程
2.1 结构化程序设计
2.2 怎样解决问题
2.3 层次化分解与复合
2.4 面向对象编程(OOP)
2.5 函数式编程(FP)
2.6 混合式编程(HP)
小结
附录3 编程简史
附录4 Java编程简史
3.1 循证架构
3.2 Java元编程
3.2.1 元编程(meta-programming)
3.3 Java主流框架概述
3.3.1 Struts
3.3.2 Hibernate
3.3.3 Spring框架
3.4 Spring生态系统
3.5 Spring JavaConfig
3.5.1 JavaConfig简介
3.5.2 JavaConfig与注解驱动配置
小结
4.1 用SpringBoot创造一切吧
4.2 SpringBoot起源
4.3 SpringBoot在整个Spring生态中
4.3.1 Spring生态顶级项目
4.3.2 Spring cloud子项目
4.4 SpringBoot核心组件
4.5 SpringBoot版本历史
4.6 SpringBoot学习成本
小结
5.0 SpringBoot版的Restful Hello,World
5.0.1 Spring Boot CLI groovy版Hello World
5.0.2 常规的Java版的Hello World
5.1 启动Springboot的自动配置@EnableAutoConfiguration
6.0 application.properties
6.1 配置文件说明
8.0 Spring Boot集成mybatis
8.1 Spring Boot集成jpa
9.0 Spring Boot集成jsp模板
9.1 Spring Boot集成thymeleaf模板
9.2 Spring Boot集成velocity模板
9.2.1 配置pom依赖的velocity-starter
9.2.2 application.properties配置
9.2.3 Dao层代码示例
9.2.4 Controller层代码示例
9.2.5 执行定时任务
9.2.6 启动类代码&运行测试
9.3 Spring Boot集成freemarker模板
9.4 Spring Boot集成groovy模板
13.0 系统基本功能
13.1 系统技术框架
13.2 系统架构设计
13.3 数据库环境配置
13.4 定义领域对象
13.5 核心业务逻辑实现
13.6 前端jsp设计
13.7 前端js代码
13.8 运行效果
小结
常见问题&解决
1.0 一切皆是映射
1.1 二进制01与易经阴阳
1.2 向上抽象封装一层
1.3 编程之初:从机械计算机到能接受指令的计算机
1.3.1 机械计算机简史
1.3.2 能接受指令的计算机
小结
2.0 什么是编程
2.1 结构化程序设计
2.2 怎样解决问题
2.3 层次化分解与复合
2.4 面向对象编程(OOP)
2.5 函数式编程(FP)
2.6 混合式编程(HP)
小结
《Spring Boot极简教程》大纲结构v0.0.2《Springboot极简教程》
第O部分 编程总论
第1章 计算机简史
1.0 一切皆是映射
1.1 二进制01与易经阴阳
1.2 向上抽象封装一层
1.3 编程之初:从机械计算机到能接受指令的计算机
1.3.1 机械计算机简史
1.3.2 能接受指令的计算机
小结
第2章 编程的本质
2.0 什么是编程
2.1 结构化程序设计
2.2 怎样解决问题
2.3 层次化分解与复合
2.4 面向对象编程(OOP)
2.5 函数式编程(FP)
2.6 混合式编程(HP)
小结
第一部分 SpringBoot的核心
第3章 Spring Boot史前简述
3.1 循证架构
3.2 Java元编程
3.2.1 元编程(meta-programming)
3.3 Java主流框架概述
3.3.1 Struts
3.3.2 Hibernate
3.3.3 Spring框架
3.4 Spring生态系统
3.5 Spring JavaConfig
3.5.1 JavaConfig简介
3.5.2 JavaConfig与注解驱动配置
小结
第4章 Spring Boot简史
4.1 用SpringBoot创造一切吧
4.2 SpringBoot起源
4.3 SpringBoot在整个Spring生态中
4.3.1 Spring生态顶级项目
4.3.2 Spring cloud子项目
4.4 SpringBoot核心组件
4.5 SpringBoot版本历史
4.6 SpringBoot学习成本
小结
第5章 一键启动应用程序
5.0 SpringBoot版的Restful Hello,World
5.0.1 Spring Boot CLI groovy版Hello World
5.0.2 常规的Java版的Hello World
5.1 启动Springboot的自动配置@EnableAutoConfiguration
第6章 零XML配置的Springboot Application
6.0 application.properties
6.1 配置文件说明
第7章 Springboot功能模块和核心组件
第8章 Springboot数据库集成mybatis,jpa
8.0 Spring Boot集成mybatis
8.1 Spring Boot集成jpa
第9章 Spring Boot集成模板引擎jsp, thymeleaf, velocity, freemarker, groovy
9.0 Spring Boot集成jsp模板
9.1 Spring Boot集成thymeleaf模板
9.2 Spring Boot集成velocity模板
9.2.1 配置pom依赖的velocity-starter
9.2.2 application.properties配置
9.2.3 Dao层代码示例
9.2.4 Controller层代码示例
9.2.5 执行定时任务
9.2.6 启动类代码&运行测试
9.3 Spring Boot集成freemarker模板
9.4 Spring Boot集成groovy模板
第二部分 SpringBoot集成
第10章 Spring Boot集成Groovy混合Java开发
第11章 Spring Boot集成Scala混合Java开发
第12章 Spring Boot集成Kotlin混合Java开发
第13章 Springboot集成mongodb开发
13.0 系统基本功能
13.1 系统技术框架
13.2 系统架构设计
13.3 数据库环境配置
13.4 定义领域对象
13.5 核心业务逻辑实现
13.6 前端jsp设计
13.7 前端js代码
13.8 运行效果
小结
第14章 Spring Boot集成Swagger快速构建REST API文档
第15章 Spring Boot微服务和DevOps
第三部分 问题解决
常见问题&解决
《Spring Boot极简教程》大纲结构v0.0.1极简SpringBoot教程
SpringBoot起源
项目背景
源代码&文档
https://github.com/spring-projects/spring-boot
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
解决了一个怎样的问题
如何把这些子项目整合起来形成一个完整的解决方案。在如何使用这些组件上,并没有相关的最佳实践提供指导
springboot底层完全是spring,只是springboot帮你做掉了很多模板配置
Spring Boot 是 Spring 框架的一个新的子项目,用于创建 Spring 4.0 项目。它的开发始于 2013 年。2014 年 4 月发布 1.0.0 版本。它可以自动配置 Spring 的各种组件,并不依赖代码生成和 XML 配置文件。
Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目
spring生态
特性
创建可以独立运行的 Spring 应用。
直接嵌入 Tomcat 或 Jetty 服务器,不需要部署 WAR 文件。
提供推荐的基础 POM 文件来简化 Apache Maven 配置。
尽可能的根据项目依赖来自动配置 Spring 框架。
提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
没有代码生成,也没有 XML 配置文件。
核心理念
约定优于配置(convention over configuration)
SpringBoot架构
核心模块解决的核心问题
SpringBoot:快速开始 A Restful Hello,World
Spring boot注解
@configuration 相当于xml配置文件
@RestController Spring新加入的声明Controller的注解@component@service @Repository 声明bean@autowired @Qualifier 注入bean
@SpringBootApplication = @Configuration @EnableAutoConfiguration @ComponentScan
@Import @ImportResource 导入配置文件@Configuration 声明配置类@RestController 实现一个RESTful web services@Component , @Service , @Repository , @Controller 声明bean@autowired @Qualifier 注入@Aspect等等支持AOP@RequestMapping 注解地址映射,url pattern
实例
https://github.com/MiniSpringBootTutorial/spring-boot/tree/master/spring-boot-samples
SpringBoot Application启动过程run流程图
SpringBoot集装箱starter
spring-boot-starter
spring-boot-starter-actuator
spring-boot-starter-jdbc
spring-boot-starter-data-jpa
spring-boot-starter-data-*
spring-boot-starter-security
spring-boot-starter-test
spring-boot-starter-web
写一个自己定制的starter
properties/YAML配置PropertyConfig
Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序:
配置优先级
命令行参数。(最高)
通过 System.getProperties() 获取的 Java 系统参数。
操作系统环境变量。
从 java:comp/env 得到的 JNDI 属性。
通过 RandomValuePropertySource 生成的“random.*”属性。
应用 Jar 文件之外的属性文件。
应用 Jar 文件内部的属性文件。
在应用配置 Java 类(包含“@Configuration”注解的 Java 类)中通过“@PropertySource”注解声明的属性文件。
通过“SpringApplication.setDefaultProperties”声明的默认属性。
属性文件
Spring Boot 提供的 SpringApplication 类会搜索并加载 application.properties 文件来获取配置属性值。SpringApplication 类会在下面位置搜索该文件。
当前目录的“/config”子目录。
当前目录。
classpath 中的“/config”包。
classpath
YAML
spring:
profiles: development
db:
url: jdbc:hsqldb:file:testdb
username: sa
password:
spring:
profiles: test
db:
url: jdbc:mysql://localhost/test
username: test
password: test
模板引擎
jsp
velocity
freemarker
thymeleaf
内嵌web容器EmbeddedServletContainerCustomizer
tomcat
jetty
集成SpringMVC开发
spring-boot 加入拦截器Interceptor
WebMvcConfigurerAdapter: 一行代码写Controller
WebSecurityConfigurerAdapter
@ControllerAdvice系统全局统一异常处理
数据库持久层
jpa
mybatis
mysql
mongodb
RESTful:Spring Boot with Mongodb
H2
应用监控endpoint
技术栈
算法,数据结构,编译,架构,框架,分布式,项目管理,高性能,DB,系统(OS/网络/存储),Javascript/CSS/html
Design Patterns
编程名言
以下内容收集自一些优秀的技术书籍章节开头的名言佳句,非常有意思,直接或间接反映了软件开发中的一些事情。
生命太短暂,不要去做一些根本没有人想要的东西。——Ash Maurya,Running Lean 作者
如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。——David Leinweber
软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷。——C.A.R. Hoare
其实,我尝试着使Ruby更自然,而不是简单。Ruby看起来很简单,但内部是非常复杂的,就像我们的身体一样。——松本行弘,Ruby之父
大部分情况下,构建程序的过程本质上是对规范调试的过程。——Fred Brooks,《人月神话》作者
软件开发往往是这样:最开始的90%代码占用了开始的90%的开发时间;剩下10%代码同样需要90%的开发时间。——Tom Cargill
当你试图解决一个你不理解的问题时,复杂化就产成了。——Andy Boothe
用几个小时来制定计划,可以节省几周的编程时间。—— 匿名
控制复杂性是计算机编程的本质。—— Brian Kernighan
计算机科学领域的所有问题都可以通过其他方式间接解决。——David Wheeler
编程是两队人马在竞争:软件工程师努力设计出最大最好的连白痴都会使用的程序;而宇宙在拼命制造最大最好的白痴。到目前为止,宇宙是胜利者。—— Rick Cook
调试一个初次见到的代码比重写代码要困难两倍。因此,按照定义,如果你写代码非常巧妙,那么没有人足够聪明来调试它。—— Brian W. Kernighan
我不是一个伟大的程序员,我只是一个具有良好习惯的优秀程序员。― Kent Beck
你们中大多数人都熟悉程序员的美德,有三种:那就是懒惰、急躁和傲慢。– Larry Wall,Perl語言发明人
任何一个傻瓜都会写能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码。——Martin Fowler
靠代码行数来衡量开发进度,就像是凭重量来衡量飞机制造的进度。——比尔•盖茨
这不是一个bug,这只是一个未列出来的特性。——匿名
作为一个程序员,郁闷的事情是,面对一个代码块,却不敢去修改。更糟糕的是,这个代码块还是自己写的。—— Peyton Jones
它在我的机器上可以很好运行!——大部分程序员
能说算不上什么,有本事就把你的代码给我看看。——Linus Torvalds,Linux之父
我认为对象就像是生物学里的细胞,或者网络中的一台计算机,只能够通过消息来通信——Alan Kay,Smalltalk的发明人,面向对象之父
当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch
质量、速度、廉价,选择其中两个。——匿名
过早的优化是罪恶之源。——Donald Knuth
没有什么代码的执行速度比空代码更快。——Merb核心原则
如果你是房间里最聪明的人,那么你走错房间了。——匿名
如果只需更改一个单一的代码行,你的部门需要花费多长时间?——Mary Poppendieck
九个人不能让一个孩子在一个月内出生。——Fred Brooks,《人月神话》作者
好代码本身就是最好的文档。当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释。——Steve McConnell,Code Complete 作者
一个人在教会电脑之前,别说他真正理解这个东西了。——Donald Knuth
UNIX理念
工程构建
maven
gradle
基于Goovy的Gradle
Gradle的安装非常方便,下载ZIP包,解压到本地目录,设置 GRADLE_HOME 环境变量并将 GRADLE_HOME/bin 加到 PATH 环境变量中,安装就完成了。
类似于Maven的pom.xml文件,每个Gradle项目都需要有一个对应的build.gradle文件,该文件定义一些任务(task)来完成构建工作
代码版本控制
git
svn
Kotlin
kotlin是由IntelliJ IDEA的开发商Jetbrain推出的一种基于JVM的开发语言,目标是简化Java中很多繁琐的设计,可以和Java无缝的集成
Springboot使用Kotlin和Java混合编程
微服务
以前一个大型应用程序搞定所有需求
现在更倾向于把大型应用程序切分成多个微服务,服务之间通过 RPC 调用
微服务架构的好处
服务之间相互隔离,减少宕机,不可用的概率
让专门的api去负责专门的事情
small is beautiful
APIs as a product
DevOps(Development&Operations)
软件生命周期融合
PD
Dev
QA
Ops
Rest API
使用Spring Boot&Swagger快速构建REST API并生成优美的API文档