SpringBoot之初体验
一、SpringBoot 介绍
1.1 SpringBoot 使命
在之前我们学习 Spring 时,我们了解到 Spring 最根本的使命就是 简化Java开发。而 SpringBoot 的出现也有其使命存在,它的使命就是为了简化 Spring 。
SpringBoot 使用 "开箱即用和约定优于配置" 的理念让你的项目无需经过大量的配置就能够快速的运行起来,这些配置工作已经由 SpringBoot 为我们做好了初始化工作,当然如果有额外的配置需求也可以更改。
1.2 SpringBoot 特性
- Spring Boot Starter: 它将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的 Maven 或 Gradle 构建中;
- 自动配置:Spring Boot 的自动配置特性利用了 Spring 4 对条件化配置的支持,合理地推测应用所需的 Bean 并自动化配置它们;
- 命令行接口(Command-line interface,CLI): Sprign Boot 的 CLI 发挥了 Groovy 编程语言的优势,并结合自动配置进一步简化 Spring 应用的开发;
- Actuator:它为 Spring Boot 应用添加了一定的管理特性。
二、创建 SpringBoot 项目
2.1 mavne 自行添加形式
打开 IDEA 创建新项目

或者已经打开 IDEA 的情况下在菜单栏上选择 File --> New --> Project 选项

2.选择 Maven 创建一个空项目

3.输入项目信息,选择下一步

4.创建一个如下目录结构的项目

* java文件夹:存放 java 代码
* resources文件夹:存放资源文件
* test文件夹:存放单元测试代码
* pom.xml:依赖库
5.接下来我们按 SpringBoot 标准的结构我们来新增一些目录

1.在 java 和 目录下新建包名
2.在 resources 下新建 static 和 templates 目录 和 application.properties 文件
* static: 存放静态资源文件
* templates: 存放模板文件
* application.properties: 存放项目配置信息
6.在 pom.xml 中增加 web 依赖
<?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>
<groupId>com.learn</groupId>
<artifactId>springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 引入 SpringBoot 依赖库 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<!--引入 web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
7.在com.learm.springboot 包下新建一个启动类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
8.新建 HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello SpringBoot";
}
}
9.启动项目,观察控制台输出

10.打开浏览器访问 http://localhost:8080/hello

2.2 Spring Initializr 形式
Spring Initializr 是 **Spring ** 官方提供的一个用来初始化 SpringBoot 项目的工具,我们来实践下。
1.选择 Spring Initializr 创建项目

2.输入项目信息

3.选择需要的依赖,这里我们只需要 web 依赖即可

4.选择项目名称和存放的路径

5.创建后的项目结构如图:

6.查看 pox.xml 文件
<?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 https://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.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.learm</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
发现和我们手工创建的项目相比多了一个 spring-boot-starter-test 依赖和打包插件
7.新建 HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello SpringBoot";
}
}
8.启动项目,观察控制台输出

9.打开浏览器访问 http://localhost:8080/hello

发现效果一样。
二、SpringBoot 打包部署
SpringBoot 支持多种打包方式,如果是前后端分离的项目使用 JAR 包形式可能是更合适的解决方案。
2.1 jar 包部署
1.在 pom.xml 文件中增加打包插件,并将打包格式设为 JAR
......
<!--设置打包格式为 JAR -->
<packaging>jar</packaging>
<build>
<plugins>
<!--增加打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.运行 Maven install 指令,它会在当前项目下新建一个 target 目录用来存放打包后的文件


3.打开命令行工具,执行 JAR 包
E:\IdeaProject\learn\springboot>cd target
E:\IdeaProject\learn\springboot\target>java -jar springboot-0.0.1-SNAPSHOT.jar
4.观察控制台输出

5.打开浏览器访问 http://localhost:8080/hello

部署成功。
2.2 war 包部署
1.在 pom.xml 文件中增加打包插件,并将打包格式设为 WAR
......
<!--设置打包格式为 WAR -->
<packaging>war</packaging>
<build>
<plugins>
<!--增加打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.修改 SpringbootApplication.java 文件,使其兼容 Tomcat 运行
@SpringBootApplication
public class SpringbootApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
3.运行 Maven install 指令,它会在当前项目下新建一个 target 目录用来存放打包后的文件


3.将 WAR 包拷贝到 Tomcat/weapps 目录下并启动 Tomcat
4.打开浏览器访问 http://localhost:8080/springboot-0.0.1-SNAPSHOT/hello

部署成功。
注:JDK1.8 需要在 Tomcat8以上才能运行返回会报 java.lang.UnsupportedClassVersionError 异常。
2.3 修改打包文件名称
默认打包生成的文件命名格式是项目名+版本号,我们可以在 pom.xml 文件中指定它的名称:
<build>
<finalName>SpringBoot</finalName>
......
</build>
执行打包命令后,查看文件:

三、SpringBoot 配置文件
在之前我们就讲到了 SpringBoot 会为我们做大量的初始化工作,如果我们需要调整某些配置的话就可以到 SpringBoot 全局配置文件中调整。Spring Boot 提供了两种常用的配置文件,分别是 properties 文件和 yml 文件。
3.1 properties 格式
语法格式:
key=value
一行一个属性。
实例:
# 修改端口号
server.port=8081
# 设置项目名称路径
server.servlet.context-path=/
3.2 yml 格式
yml 格式全程叫 YAML(YAML Ain't Markup Language),是一种以数据为中心的语言,比 json,xml 更适合做配置文件。
语法格式:
key:[空格]value
注:**冒号之后的空格
实例:
server:
# 修改端口号
port: 8081
servlet:
# 设置项目名称路径
context-path: /
更多属性参考 SpringBoot官网
3.3 读取配置属性
配置文件:
user:
name: MarkLogZhu
age: 26
email: marklogzhu@163.com
通过 @ConfigurationProperties 注解取值:
1.添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.创建 User01 对象
@Component
@ConfigurationProperties(prefix = "user")
public class User01 {
private String name;
private int age;
private String email;
@Override
public String toString() {
return "User01{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
...get/set
}
3.测试输出
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
private User01 user01;
@Test
public void testUser01() {
System.out.println("user01:" + user01.toString());
}
}
4.观察控制台输出:
user01:User01{name='zhu', age=26, email='marklogzhu@163.com'}
通过 @Value 注解取值:
1.创建 User01 对象
@Component
public class User02 {
@Value("${user.name}")
private String name;
@Value("${user.age}")
private int age;
@Value("${user.email}")
private String email;
@Override
public String toString() {
return "User02{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
...get/set
}
2.测试输出
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
private User02 user02;
@Test
public void testUser02() {
System.out.println("user02:" + user01.toString());
}
}
3.观察控制台输出:
user02:User02{name='zhu', age=26, email='marklogzhu@163.com'}
可以发现两者方式都可以获取到值,它们的优缺点对比如下:
| 读取方式 | 优点 | 缺点 |
|---|---|---|
| ConfigurationProperties | 1.可以从配置文件中批量注入属性; 2.支持获取复杂的数据类型; 3.对属性名匹配的要求较低; 4.支持JAVA的JSR303数据校验; |
不支持SpEL表达式; |
| Value | 支持SpEL表达式 | 1.只能一个个配置注入值; 2.不支持数组、集合等复杂的数据类型; 3.不支持数据校验; 4.对属性名匹配有严格的要求 |
SpringBoot之初体验的更多相关文章
- SpringBoot入门初体验
概述 Java项目开发中繁多的配置,复杂的部署流程和第三方技术集成让码农在开发项目中效率低下,因此springBoot应运而生. 环境 IntelliJ IDEA 2018.3 jkd1.8 开始(傻 ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- SpringBoot初体验及原理解析
一.前言 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...
- springboot+支付宝完成秒杀项目的初体验
springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...
- 蚂蚁 RPC 框架 SOFA-RPC 初体验
前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...
- spring cloud 初体验
spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有 ...
- 215.Spring Boot+Spring Security:初体验
[视频&交流平台] SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http://t.cn/R3QeRZc SpringBoot Shiro视频 ...
- Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
随机推荐
- webpack前置知识1(模块化开发)
webpack前置知识1(模块化开发) 新建 模板 小书匠 在开始对模块化开发进行讲解之前,我们需要有这么一个认识,即 在没有过多第三方干扰时,成本低收益高的事物更容易获得推广和信赖. 模块化开发就 ...
- 技术文档翻译-------glove readme(1)
Package Contents To train your own GloVe vectors, first you tools. An example is included in demo.sh ...
- 1443:【例题4】Addition Chains
1443:[例题4]Addition Chains 题解 注释在代码里 注意优化搜索顺序以及最优化剪枝 代码 #include<iostream> #include<cstdio&g ...
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler />
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- 【奇技淫巧】使用 SSH 转发 Sock5 流量
标题:使用 SSH 转发 Sock5 流量 日期:2018-06-27 介绍:使用 ssh 来做个 sock5 的代理,穿透到内网中做后渗透 0x01. 基本信息 在 ubuntu(10.211.55 ...
- 系统分析与设计HW1
软件工程的定义 1993年,电气电子工程师学会(IEEE)给出了一个定义:"将系统化的.规范的.可度量的方法用于软件的开发.运行和维护的过程,即将工程化应用于软件开发中". 阅读经 ...
- LoadRunner11安装及破解
一.LoadRunner11安装 以管理员身份运行setup.exe 选择第一个LoadRunner完整安装程序 按照界面会弹出以上提示框,直接选择否 检查系统缺少哪些组件,点击“确定”自动安装 点击 ...
- Selenium学习之==>ActionChainsApi接口详解
ActionChains UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,Selenium给我们提供了Ac ...
- java中的命名规则
转载自:http://growstep.diandian.com/post/2011-08-17/3989094 1.类名首字母应该大写.属性(成员变量).方法.对象变量以及所有标识符(如形式参数.实 ...
- [转帖]深入理解 MySQL—锁、事务与并发控制
深入理解 MySQL—锁.事务与并发控制 http://www.itpub.net/2019/04/28/1723/ 跟oracle也类似 其实所有的数据库都有相同的机制.. 学习了机制才能够更好的工 ...