Hello Spring Boot
一、Spring Boot 简介
0x01 概述
Spring Boot
可以称之为 新一代 JavaEE 开发标准;随着动态语言的流行 (Ruby
、Groovy
、Scala
、Node.js
),Java
的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。
在上述环境下,Spring Boot
应运而生。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速的运行起来。使用 Spring Boot
很容易创建一个独立运行(运行 Jar
,内嵌 Servlet
容器)准生产级别的基于 Spring
框架的项目,使用 Spring Boot
你可以不用或者只需很少的 Spring
配置。
0x02 主要目标
Spring Boot
让您更简单的创建基于 Spring
的独立的,生产级的可运行 “应用程序”。 对于 Spring
平台和第三方库,我们采取一种 “强制性” 的观点,以至于您可以更加轻松的开始使用。 大部分 Spring Boot
应用程序只需要一点点 Spring
的配置即可。
您能够使用 Spring Boot
创建以 java -jar
或更传统的 war
部署的方式运行的 Java 应用程序。我们也提供了可以运行 “spring scripts
” 的命令行(CLT)工具。
- 为所有 “
Spring
开发” 提供更快速、更便于理解的入门体验。 - 做到开箱即用,快速解决后期需求变更带来的问题。
- 提供一系列的非功能性特性,这些特性是大型项目类所共有的(如: 内嵌
servers
,security
,metrics
,health
checks
, andexternalized
configuration
)。 - 完全不生成代码, 也不需要配置
XML
。
二、Spring 简史
0x01 Spring 1.x 时代
在 Spring1.x
时代,都是通过 xml 文件配置 bean,随着项目的不断扩大,需要将 xml
配置分放到不同的配置文件中,需要频繁的在 java
类和 xml
配置文件中切换。
0x02 Spring 2.x 时代
随着 JDK 1.5
带来的注解支持,Spring2.x
可以使用注解对 Bean
进行申明和注入,大大的减少了 xml
配置文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用 xml 还是注解呢?
最佳实践:
- 应用的基本配置用 xml,比如:数据源、资源文件等
- 业务开发用注解,比如:
Service
中注入bean
等
0x03 Spring 3.x 时代
从 Spring3.x
开始提供了 Java
配置方式,使用 Java
配置方式可以更好的理解你配置的 Bean
,现在我们就处于这个时代,并且 Spring4.x
和 Spring boot
都推荐使用 java
配置的方式。
0x04 Spring 5.x 时代
Spring5.x
是 Java
界首个支持响应式的 Web 框架,是 Spring
的一个重要版本,距离 Spring4.x
差不多四年。在此期间,大多数增强都是在 Spring Boot 项目中完成的,其最大的亮点就是提供了完整的端到端响应式编程的支持(新增 Spring WebFlux
模块)。
Spring WebFlux
同时支持使用旧的 Spring MVC
注解声明 Reactive Controller
。和传统的 MVC Controller
不同,Reactive Controller
操作的是 非阻塞 的 ServerHttpRequest
和 ServerHttpResponse
,而不再是 Spring MVC 里的 HttpServletRequest
和 HttpServletResponse
。
至此也代表着 Java
正式迎来了响应式异步编程的时代。
0x05 Spring Boot 优缺点
优点
- 快速构建项目
- 对主流开发框架的无配置集成
- 项目可独立运行,无需外部依赖 Servlet 容器
- 提供运行时的应用监控
- 极大地提高了开发、部署效率
- 与云计算的天然集成
缺点
- 版本迭代速度很快,一些模块改动很大
- 由于不用自己做配置,报错时很难定位
三、创建项目
这里我们使用 Intellij IDEA
来新建一个 Spring Boot
项目。
0x01 Spring 初始化器
0x02 填写项目信息
0x03 选择版本和依赖
0x04 工程目录结构
创建完成后的工程目录结构如下:
│ .gitignore
│ pom.xml
│
│
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─funtl
│ │ └─hello
│ │ └─spring
│ │ └─boot
│ │ HelloSpringBootApplication.java
│ │
│ └─resources
│ │ application.properties
│ │
│ ├─static
│ └─templates
└─test
└─java
└─com
└─funtl
└─hello
└─spring
└─boot
HelloSpringBootApplicationTests.java
- .gitignore:
Git
过滤配置文件 - pom.xml:
Maven
的依赖管理配置文件 - HelloSpringBootApplication.java:程序入口
- resources:资源文件目录
- static: 静态资源文件目录
- templates:模板资源文件目录
- application.properties:Spring Boot 的配置文件,实际开发中会替换成 YAML 语言配置(application.yml)
0x05 POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.funtl</groupId>
<artifactId>hello-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello-spring-boot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.funtl.hello.spring.boot.HelloSpringBootApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
- parent:继承了 Spring Boot 的 Parent,表示我们是一个 Spring Boot 工程
-
spring-boot-starter-web
:包含了spring-boot-starter
还自动帮我们开启了 Web 支持
四、功能演示
我们创建一个 Controller
来演示一下 Spring Boot 的神奇功能
package com.funtl.hello.spring.boot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(value = "/")
public String sayHi() {
return "Hello Spring Boot.";
}
}
启动 HelloSpringBootApplication
的 main()
方法,浏览器访问 http://localhost:8080 可以看到:
Hello Spring Boot.
神奇之处
- 没有配置 web.xml
- 没有配置 application.xml,Spring Boot 帮你配置了
- 没有配置 application-mvc.xml,Spring Boot 帮你配置了
- 没有配置 Tomcat,Spring Boot 内嵌了 Tomcat 容器
自定义 Banner
在 Spring Boot 启动的时候会有一个默认的启动图案
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _
( ( )___ | '_ | '_| | '_ / _` |
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
我们在 src/main/resources
目录下新建一个 banner.txt
通过 http://patorjk.com/software/taag 网站生成字符串,将网站生成的字符复制到 banner.txt 中
再次运行这个程序
${AnsiColor.BRIGHT_RED}
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O = /O //
// ____/`---'____ //
// .' \| |// `. //
// / \||| : |||// //
// / _||||| -:- |||||- //
// | | \ - /// | | //
// | _| ''---/'' | | //
// .-__ `-` ___/-. / //
// ___`. .' /--.-- `. . ___ //
// ."" '< `.____<|>_/___.' >'"". //
// | | : `- `.;` _ /`;.`/ - ` : | | //
// `-. _ __ /__ _/ .-` / / //
// ========`-.____`-.________/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////
常用属性设置:
-
${AnsiColor.BRIGHT_RED}
:设置控制台中输出内容的颜色 -
${application.version}
:用来获取MANIFEST.MF
文件中的版本号 - {application.formatted-version}:格式化后的 {application.version} 版本信息
-
${spring-boot.version}
:Spring Boot 的版本号 - {spring-boot.formatted-version}:格式化后的 {spring-boot.version} 版本信息
配置文件
Spring Boot 项目使用一个全局的配置文件 application.properties
或者是 application.yml
,在 resources
目录下或者类路径下的 /config
下,一般我们放到 resources
下。
修改 Tomcat 的端口为 9090,并将默认的访问路径 "/" 修改为 "boot",可以在 application.properties
中添加:
server.port=9090
server.context-path=/boot
或在 application.yml 中添加:
server:
port: 9090
context-path: /boot
Starter POM
Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom ,只要使用了应用场景所需要的 starter pom ,相关的技术配置将会消除,就可以得到 Spring Boot 为我们提供的自动配置的 Bean。
日志配置
Spring Boot 对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置
默认情况下,Spring Boot 使用 Logback 作为日志框架
logging:
file: ../logs/spring-boot-hello.log
level.org.springframework.web: DEBUG
关闭特定的自动配置
关闭特定的自动配置使用 @SpringBootApplication
注解的 exclude
参数即可,这里以关闭数据源的自动配置为例
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 短网址程序YOURLS安装及配置教程与设置中文
- MGR用哪个版本?5.7 vs 8.0
- 同事直呼666!小姐姐仅用3行代码就能玩出花来
- MySQL升级至8.0需要考虑哪些因素?
- 某云Music——JS破解全过程
- 和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性
- 框架源码调试实战之easypoi异常解决方案精讲
- MySQL8.0的错误日志
- Shiro学习笔记(一)
- Shiro学习笔记(二)
- Shiro学习笔记 三(认证授权)
- Shiro学习笔记四(Shiro集成WEB)
- Shiro学习笔记五(Shiro标签,及通配符)
- Shiro学习笔记六(自定义Reaml-使用数据库设置 user roles permissions)
- Luncene学习 第一天 《入门程序》