SpringBoot初识
1、SpringBoot 简介
1.1、什么是SpringBoot?
Spring Boot 是由 Pivotal 团队提供的框架,其设计目的是用来简化新Spring应用的初始搭建 以及开发过程。 该框架使用了特定的方式(继承starter,约定优先于配置)来进行配置,从而使开发人员不再需要 定义样板化的配置。通过这种方式,Boot 致力于在蓬勃发展的快速应用开发领域(rapidapplication development)成为领导者。 SpringBoot并不是一个框架,从根本上将,它就是一些库的集合,maven或者gradle项目导入 相应依赖即可使用Spring Boot,而且无需自行管理这些库的版本。
1.2、为什么要使用 SpringBoot?
SpringBoot是为简化Spring项目配置而生,使用它使得jar依赖管理以及应用编译和部署更为 简单。Spring Boot提供自动化配置,使用Spring Boot,你只需编写必要的代码和配置必须的属性。 使用 Spring Boot,只需 20 行左右的代码即可生成一个基本的 Spring Web 应用,并且内置了 tomcat,构建的fat Jar包通过Java -jar就可以直接运行。 如下特性使得Spring Boot非常契合微服务的概念,可以结合Spring Boot与Spring Cloud 和Docker技术来构建微服务并部署到云端: 一个可执行jar即为一个独立服务很容易加载到容器,每个服务可以在自己的容器(例如docker) 中运行,通过一个脚本就可以实现配置与部署,很适合云端部署,并且自动扩展也更容易 简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单。
1.3、SpringBoot 提供哪些功能?
无需手动管理依赖 jar 包的版本
Spring boot 通过 springbootstarter 项目管理其提供的所有依赖的版本,当升级 springboot 时,这 些依赖的版本也会随之升级。个人无需指定版本号。 但是也可以自定义版本号覆盖 springboot 的默认值。每个版本的 boot 都有对应的 base spring version,不建议明确地指定 spring 版本。 例如,使用 maven 时,只需简单的在 pom 中包含 spring-boot-starter-web 即引入了 SpringMVC 和 Tomcat 的依赖。 下面是 SpringBoot 在 org.springframework.boot 组下提供的一些 Starters:
名称 | 描述 |
---|---|
spring-boot-starter | 核心Spring Boot starter,包括自动配置支持,日志和YAML |
spring-boot-actuator | 生产准备的特性,用于帮你监控和管理应用 |
spring-boot-starter-web | 对全栈web开发的支持,包括Tomcat和Spring-webmvc |
spring-boot-starter-aop | 对面向切面的支持,包括spring-aop和AspectJ |
spring-boot-starter-data-jpa | 对“Java持久化API”的支持,包括spring-data-jpa,spring-orm和Hibernate |
spring-boot-starter-jdbc | 对JDBC数据库的支持 |
spring-boot-starter-security | 对spring-security的支持 |
小结
Springboot 其本质还是spring相关的框架,不过为开发者提供了一系列默认的starter,大大降低 了spring项目开发的配置工作,所谓约定大于配置。 但其也有缺点,就是使用简单,但很多原理性的东西可能对于不了解 spring、 springMvc 、Mybatis 、Hibernate 、JPA等相关框架的开发者而言还是需要重新学习。
2、SpringBoot入门之HelloWorld
首先创建一个Maven的项目,这里就不多说了。(一般可以直接创建Springboot项目。)如下图:
springboot项目
这样,他会自动给你生成App.java启动类。
我创建好的项目目录,如下:
项目目录
创建好项目后,我们就要导入spring-boot的依赖了,在pom.xml文件中,添加如下依赖:
<!--springbootparent 节点,引入这个之后,在下面和 springboot 相关的就不需要引入版本了; -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<!-- 添加 spring-boot-starter-web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
接下来我们就可以进行web开发了。这里我写了两个HelloWorld类。如下:
package com.nieshenkuan.test;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RestController和@RequestMapping注解是来自SpringMVC的注解,它们不是SpringBoot的特定部分。
* 1. @RestController:提供实现了REST API,可以服务JSON,XML或者其他。这里是以String的形式渲染出结果。
* 2. @RequestMapping:提供路由信息,”/“路径的HTTP Request都会被映射到sayHello方法进行处理。
*
* @author NSK
*
*/
@RestController
public class HelloWorldController {
@RequestMapping("/")
public String say() {
return "hello,world!";
}
}
package com.nieshenkuan.test;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String helloJsp(Model model) {
System.out.println("HelloController.helloJsp().hello=hello");
model.addAttribute("hello", "hello");
return "hello";
}
}
启动类:App.java
package com.nieshenkuan.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 1. @SpringBootApplication:Spring Boot 应用的标识
* 2. Application很简单,一个main函数作为主入口。
* SpringApplication引导应用,并将Application本身作为参数传递给run方法。
* 具体run方法会启动嵌入式的Tomcat并初始化Spring环境及其各Spring组件。
*
* @author NSK
*
*/
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
执行流程:先启动App这个主类,然后再浏览器中输入:localhost:80/hello跟localhost:80就得到能得到对应结果,
这里我通过application.properties属性文件,将端口给改为80,还有一些其他的配置,如下:
server.port=80
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
application.hello=HelloAngelFromapplication
springboot项目在运行时会加载这个文件。
接下来再讲一个springboot的热部署问题:
即使修改了输出内容也要重启APP,非常麻烦!可以使用spring-boot-devtools来实现!
1)介绍
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码 更改到最新的 App 上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止 后再启动还要更快,更快指的不是节省出来的手工操作的时间。 其深层原理是使用了两个 ClassLoader,一个 Classloader 加载那些不会改变的类(第三方 Jar 包),另一个 ClassLoader 加载会更改的类,称为 restartClassLoader ,这样在有代码更改的时候,原来的 restart ClassLoader 被丢弃,重新创建一个 restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5 秒以内)
2)使用 :添加依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<!--添加spring-boot-maven-plugin: -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 如果没有该项配置,devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>