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>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容