1、什么是SpringBoot

SpringBoot是基于Spring的基础上提供了一套全新的框架,其目的是为了在开发时简化Spring的相关配置及开发过程。在SpringBoot未出来之前,准备搭建一个Spring的开发环境需要配置一堆的XML文件,而SpringBoot就是去除了大量的XML配置文件,简化了复杂的依赖管理。

Spring Boot集成了大量常用的第三方库配置,Spring Boot 应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码(基于Java 的配置),开发者能够更加专注于业务逻辑。

2、SpringBoot特征

  • 独立运行的Spring项目,使用jar包的形式独立运行,只需通过命令java -jar xx.jar即可运行。
  • 内嵌Servlet容器(例如TomcatJetty或者Undertow 等),应用无需打成WAR包 。
  • 提供starter简化Maven配置,提供了一系列的starter项目对象模型(POMS)来简化 Maven配置。
  • 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
  • 自带应用监控(如指标、健康检查和外部化配置)。
  • 没有代码生成和XML配置。

3、快速搭建SpringBoot

  • 引入maven依赖

    首先引入parent依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
</parent>

因为是要开发一个web项目,因此需要引入web依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 创建启动类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
  • 创建controller
@RestController
@RequestMapping(path = "/v1/index")
public class IndexController {
@GetMapping(path = "")
public String index(){
return "Hello Spring Boot!";
}
}
  • 启动项目
Connected to the target VM, address: '127.0.0.1:54766', transport: 'socket'

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.3) 2021-08-04 23:16:55.694 INFO 15528 --- [ main] com.tenghu.sb.Application : Starting Application using Java 1.8.0_301 on Arvin with PID 15528 (E:\project\java\spring-boot-study\target\classes started by admin in E:\project\java\spring-boot-study)
2021-08-04 23:16:55.696 INFO 15528 --- [ main] com.tenghu.sb.Application : No active profile set, falling back to default profiles: default
2021-08-04 23:16:56.231 INFO 15528 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-08-04 23:16:56.237 INFO 15528 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-08-04 23:16:56.237 INFO 15528 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.50]
2021-08-04 23:16:56.292 INFO 15528 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-08-04 23:16:56.292 INFO 15528 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 567 ms
2021-08-04 23:16:56.503 INFO 15528 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-08-04 23:16:56.509 INFO 15528 --- [ main] com.tenghu.sb.Application : Started Application in 1.065 seconds (JVM running for 1.607)
2021-08-04 23:17:07.919 INFO 15528 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-08-04 23:17:07.919 INFO 15528 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-08-04 23:17:07.920 INFO 15528 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms

看到这个结果,表示SpringBoot项目就已经启动成功了,现在使用浏览器访问路径http://localhost:8080/v1/index就可以看到浏览器输出结果:Hello Spring Boot!

以上是手动建立一个空的maven项目,手动添加依赖的方式创建一个简单的spring boot项目,另外还有两种方式可以快速生成spring boot项目:

  • 使用IDEA,里面已经集成了SpringBoot插件
  • 使用官网提供的创建SpringBoot插件。https://start.spring.io/

4、SpringBoot配置文件

从上面的简单例子已经可以看出,我们没有将项目打包成war文件发布到Tomcat容器,就可以启动项目,并且从日志上看出端口默认就是8080,从上面特性已经指出SpringBoot内嵌了Tomcat容器,并且设置了必须的一些默认值,那么如果我们想替换相关默认值,就可以使用自定义的配置文件来覆盖默认配置。

SpringBoot提供了两种配置文件类型:propertiesyml(而yml也可以写成yaml)。默认配置文件名称为:application,放在resources目录下。这两种配置文件在同一级的优先级为:properties>yml>yaml

比如把默认端口改为8088,上面访问路径为http://localhost:8080/v1/index,按照之前的习惯,通常是主机后面会跟项目名,也可以通过配置文件配置。

使用yaml方式配置:

server:
servlet:
context-path: /spring-boot
port: 8088

注意:yaml的配置方式:号后面必须有空格。

简单介绍下yaml的基本语法:

  • 大小写敏感
  • 数据值前面必须有空格(也就是:号后面),作为分隔符
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格(因为各个系统Tab对应的空格数目可能不同,导致层级混乱)
  • 缩进的空格数目不重要,只要相同层级的元素左对齐就行
  • #表示注释,从这个字符到行尾,都会被解析器忽略

yaml的数据格式:

  • 对象(map): 键值对的集合
person:
name: lisi # 行内写法
person: {name: lisi}
  • 数组:一组按次排列的值
names:
- zhangsan
- lisi # 行内写法
names: [zhangsan,lisi]
  • 纯量:单个的、不可再分的值
msg1: `hello \n world` #单引号忽略转义字符
msg2: "hello \n world" #双引识别转义字符

yaml参数引用:

有时候在配置一个参数,想被多个地方引用,可以这样配置:

name: zhangsan
person:
name: ${name} #引用上面定义的name的值

使用properties配置:

server.servlet.context-path=/spring-boot
server.port=8088

注意:配置context-path必须是/开头

启动项目从日志输出:

Tomcat started on port(s): 8088 (http) with context path '/spring-boot'

这个时候我们的访问路径就是:http://localhost:8088/spring-boot/v1/index

5、读取配置内容

在实际开发时,有时候需要做一些初始化的自定义配置,那么怎么在代码里面获取到配置文件的自定义配置,比如自定义配置name: zhangsan。读取配置内容有如下三种方式:

  • 使用注解@Value
@Value("${name:lisi}")
private String name; @GetMapping(path = "")
public String index(){
return String.format("Hello %s Spring Boot!",name);
}

访问结果:Hello zhangsan Spring Boot!,使用@Value注解就可以获取配置文件的自定义配置,:后面表示默认值,如果配置文件没有配置,则取默认值。

  • Environment
@Autowired
private Environment environment; System.out.println(String.format("使用Environment获取配置name:%s",environment.getProperty("name")));

输出结果:使用Environment获取配置name:zhangsan

  • @ConfigurationProperties

    定义一个User
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
private String name;
private int age;
private List<String> address; @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}

必须使用@Component@ConfigurationProperties注解,@Data是使用了lombok插件。如果需要使用lombok,需要在IDEA安装Lombok插件,引入lombok依赖

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

配置文件如下配置:

user:
name: zhangsan
age: 12
address:
- sichuang
- hunan

controller中使用

@Autowired
private User user; System.out.println(user.toString());

输出结果:User{name='admin', age=12, address=[sichuan, hunan]}

6、使用Profile多环境切换

在实际开发场景中,我们一般有开发、测试、生产环境,每个环节的某些配置会不一样,那么怎么来解决不同环境配置的问题,下面详细介绍使用Profile多环境的切换。

profile多环境配置方式:

  • profile文件的方式,提供多个配置文件,每个文件代表一种环境。

    • application-dev.properties/yml 开发环境
    • application-test.properties/yml 测试环境
    • application-prod.properties/yml 生产环境
  • yml多文档方式:
    • 在yml配置文件中使用---分割不同配置

profile激活多环境方式:

  • 配置文件,在配置文件使用配置spring.profiles.active=dev
  • 虚拟机参数:在IDEAVM options指定:-Dspring.profiles.active=dev
  • 命令行参数:
    • 打包情况下:java -jar xxx.jar --spring.profiles.active=dev
    • 使用IDEA下的Program arguments指定:--spring.profiles.active=dev

多文件的方式这里就不做操作了,上面介绍已经说明了,按照标准的文件格式命名就行,根据实际情况选择是用properties还是yml的方式。下面介绍下yml多文档的方式:

# 开发环境
---
spring:
config:
activate:
on-profile: dev
server:
port: 8081
# 测试环境
---
spring:
config:
activate:
on-profile: test
server:
port: 8082
# 生产环境
---
spring:
config:
activate:
on-profile: prod
server:
port: 8082
---
# 公用配置
server:
servlet:
context-path: /spring-boot

至于激活的方式,就参考上面的测试即可。

SprintBoot简单入门的更多相关文章

  1. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  2. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  3. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

  4. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  5. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  6. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  7. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  8. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

  9. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

随机推荐

  1. DOS命令行(2)——Windows磁盘维护与管理

    预备知识 1 -- 磁盘 1.磁盘分区 主磁盘分区.扩展磁盘分区.逻辑分区 主磁盘分区是物理磁盘的一部分,它像物理上独立的磁盘那样工作.对于基本启动记录(MBR)的磁盘,在一个基本磁盘上最多可以创建四 ...

  2. vue中$nextTick详细讲解保证你一看就明白

    1.功能描述 今天我们要实现这个一个小功能: 页面渲染完成后展示一个div元素: 当点击这个div元素后: div元素消失: 出现一个input元素:并且input元素聚焦 想必大家我觉得简单,我们一 ...

  3. C++ 11 关键字

    1.auto 我现在用auto,基本是在变量定义时根据初始化表达式自动推断该变量的类型. 另外与关键字 decltype 连用,在声明或定义函数时作为函数返回值的占位符. auto不能用来声明函数的返 ...

  4. 4、saltstack的使用

    官方文档地址:http://repo.saltstack.com/#rhel 4.1.saltstatck介绍: 用户要一致,这里使用的是root用户: 用于批量管理成百上千的服务器: 并行的分发,使 ...

  5. iOS如何提升,首先得知自己的处境!(欢迎评论留言)

    聊聊行情?为什么总有人在乎旁人的看法而忽略自己的初衷?虽然iOS开发市场说不上好但也绝不算坏,想没想过那些煽风点火说iOS不行的人在做什么?真的转行从头开始?错.大错特错!在劝退你的同时他们会默默的学 ...

  6. ICMP路由重定向攻击

    ICMP介绍 ICMP(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.控 ...

  7. 浅读tomcat架构设计之tomcat容器Container(3)

    浅读tomcat架构设计和tomcat启动过程(1) https://www.cnblogs.com/piaomiaohongchen/p/14977272.html 浅读tomcat架构设计之tom ...

  8. SpringBoot Cache 深入

    这上一篇文章中我们熟悉了SpringBoot Cache的基本使用,接下来我们看下它的执行流程 CacheAutoConfiguration 自动装配类 根据图中标注,看到它引用了CachingCon ...

  9. AcWing 1252. 搭配购买

    #include<bits/stdc++.h> #define N 10010 using namespace std; int fa[N],v[N],pr[N]; int vv[N],p ...

  10. Python调用shell命令常用方法

    Python调用shell指令 方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未 ...