1 简介

Spring Boot是快速搭建Spring工程的脚手架,简化配置与依赖关系(约定大于配置),让我们把精力集中在业务部分

2 简单入门事例

创建一个Hello World的Web工程

2.1 创建Maven工程

直接Next -> 填写工程坐标 -> 创建

2.2 添加pom.xml依赖

父工程管理jar包,没有业务代码,子工程需要jar包时不用写版本号

<!--  父工程  -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent> <!-- 设置JDK版本 -->
<properties>
<java.version>1.8</java.version>
</properties> <!-- 添加依赖 -->
<dependencies>
<!-- 场景启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

2.3 创建主程序类Application

注意Application要放在根目录下,因为会去Application的同级目录去扫描,注意左边有层级结构

@SpringBootApplication
public class Application { public static void main(String[] args) { //SpringBoot启动
SpringApplication.run(Application.class,args);
}
}

2.4 创建Controller

@RestController
public class HelloController { //请求映射
@RequestMapping(value = "hello",method = RequestMethod.GET)
public String hello(){
return "Hello Worlddddd";
}
}

2.5 启动并测试

启动SpringBoot应用

打开浏览器测试成功

总结

  • 父工程管理各种依赖,Spring已经帮我们测试好各版本之间的关系了,所以添加依赖不用版本号
  • 启动器帮我们导入各种场景所需要组件
  • @SpringBootApplication标注说明这个类是主配置类,运行该类的main方法来启动SpringBoot应用

3. 自动配置

我们来看看@SpringBootApplication这个组合注释,底层还包括两个注解

  • @SpringBootConfiguration:SpringBoot的配置类,标注在类上表示该类是个配置类

    • 它底层又有@Configuration:Spring的注解,放在配置类上

      • 配置类--配置文件:配置类也是容器中的一个组件:@Component
  • @EnableAutoConfiguration:开启自动配置,以前需要配置的东西,SpringBoot帮我们自动配置

    • 它底层有@AutoConfigurationPackage:自动配置包

      • Import(AutoConfigurationPackages.Registrar.class):Spring底层注解,给容器导入组件,即将主程序同级及下面子包所有组件扫描到Spring容器中
    • @Import(.AutoConfigurationImportSelector.class):导入组件的选择器,会给容器导入非常多的自动配置类(xxxAutoConfiguration),并配置好对应的组件

  • 有了自动配置类就免去了手动编写配置注入组件了,其实现由SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)完成

总结:SpringBoot启动时从类路径下META_INF/spring.factories获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作

4. 配置文件

  • 名字是固定以application开头的

  • 有两种方式application.properties和application.yml

  • 用来修改SpringBoot默认配置

4.1 读取配置文件(这里以yml为事例)

  • 首先要在resources下创建application.yml配置文件,然后在里面输入需要被读取的数据
jdbc:
driverclassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: howl
  • 创建bean类,把配置的属性值写入bean对象中
  • 需要用到@ConfigurationProperties()注解,该注解需要导入依赖
<!--  注解解析器  -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
  • 只有这个对象是容器中的组件,才能使用容器的@ConfigurationProperties功能
/*
* @ConfigurationProperties把配置文件的属性注入该类中
*/
@Component
@ConfigurationProperties(prefix = "jdbc")
public class JDBC {
private String driverclassName;
private String url;
private String username;
private String password; //各种Getters和Setters
}
  • 结构图

  • 最后

    再次启动Web应用,application.yml中以jdbc为前缀的属性会自动注入到JDBC这个对象组件中去

常用注解

//将配置文件的属性注入到该对象中,只有这个注解是生效的,需要配合@EnableConfigurationProperties注解,或加入@Component注解
@ConfigurationProperties(prefix = "jdbc") //属性注入
@value("${name}") //使对应的配置文件生效加入到Bean容器
@EnableConfigurationProperties(JDBCProperties.class) //声明一个类为配置类,代替xml文件,一般配合@Bean注解
@Configuration
//声明在方法上,将返回值加入Bean容器,代替<bean>标签
@Bean //------------推荐使用上面来指定配置文件,在主目录下创一个config包------------- //指定外部属性文件,这时还没生效,需要配合下面的注解
@PropertySource(value = {"classpath:other.properties"})
//加载多个配置文件,放在主程序类上
@ImportResourcec(locations = {"classpath:other.yml"})

@ConfigurationProperties和@value区别

@ConfigurationProperties @value
功能 批量注入配置 单个指定
松散绑定 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂数据类型 支持 不支持

4.2 Profile

  • 在不同环境下需要使用不同的配置文件,这里就可以用Profile

  • 名称规范 application-{profile}.yml / properties

  • 默认是application.yml /properties里的配置

我们在resources下建立两个配置文件

  • application.yml(用于部署配置)
  • application-dev.yml(用于生产环境)

二者用上面的JDBC配置文件,不同于username,一个为root,一个为Howl

激活测试

# 在application.yml主配置文件中添加下面配置
spring:
profiles:
active: dev

Controller代码

//请求映射
@RequestMapping(value = "hello",method = RequestMethod.GET)
public String hello(){
return jdbc.getUsername();
}

未激活dev前,username为root

激活dev后为,username为Howl

SpringBoot入门(一)的更多相关文章

  1. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  2. SpringBoot入门基础

    目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...

  3. SpringBoot入门示例

    SpringBoot入门Demo SpringBoot可以说是Spring的简化版.配置简单.使用方便.主要有以下几种特点: 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简 ...

  4. Spring全家桶系列–[SpringBoot入门到跑路]

    //本文作者:cuifuan Spring全家桶————[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...

  5. springboot入门之一:环境搭建(续)

    在上篇博客中从springboot的入门到运行一个springboot项目进行了简单讲述,详情请查看“springboot入门之一”.下面继续对springboot做讲述. 开发springboot测 ...

  6. 【Java】SpringBoot入门学习及基本使用

    SpringBoot入门及基本使用 SpringBoot的介绍我就不多说了,核心的就是"约定大于配置",接下来直接上干货吧! 本文的实例: github-LPCloud,欢迎sta ...

  7. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  8. SpringBoot入门(五)——自定义配置

    本文来自网易云社区 大部分比萨店也提供某种形式的自动配置.你可以点荤比萨.素比萨.香辣意大利比萨,或者是自动配置比萨中的极品--至尊比萨.在下单时,你并没有指定具体的辅料,你所点的比萨种类决定了所用的 ...

  9. SpringBoot入门(四)——自动配置

    本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...

  10. SpringBoot入门(二)——起步依赖

    本文来自网易云社区 在前一篇我们通过简单几步操作就生成了一个可以直接运行的Web程序,这是因为SpringBoot代替我们做了许多工作,概括来讲可以分为起步依赖和自动配置.这一篇先来看看起步依赖. 项 ...

随机推荐

  1. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

    由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...

  2. tf.shape()

    tf.shapetf.shape( input, name=None, out_type=tf.int32)12345例如:将矩阵的维度输出为一个维度矩阵import tensorflow as tf ...

  3. 【b703】矩阵取数游戏

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规 ...

  4. 移动端遇到的bug (长期更新)

    移动端遇到的bug border-radius和transform在一起的bug 当父级设置了border-radius+overflow:hidden的时候,圆角是可以包住子级的,这是个很常见的场景 ...

  5. linux scull 的设计

    编写驱动的第一步是定义驱动将要提供给用户程序的能力(机制).因为我们的"设备"是计算 机内存的一部分, 我们可自由做我们想做的事情. 它可以是一个顺序的或者随机存取的设 备, 一个 ...

  6. js实现小数点四舍五入

    js实现小数点四舍五入 其实这个问题,在之前的面试中被提问到了,由于笔者平时都是用原生的toFixed()的方法来保留小数点,所以当时并没有回答出来这个问题,呜呜呜~.~

  7. P1067 叠罗汉

    题目描述 茜茜和聪聪是关系很好的同桌,有一天,茜茜觉得天空中的白云像棉花糖一样,应该很好吃吧,但是够不着,她很烦恼. 聪聪为了帮助茜茜解决烦恼,决定帮他把天空中的白云摘下来做成棉花糖给她吃. 但是聪聪 ...

  8. P1026 翻硬币

    题目描述 小明正在玩一个"翻硬币"的游戏.桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果 ...

  9. I/O 端口和 I/O 内存

    每个外设都是通过读写它的寄存器来控制. 大部分时间一个设备有几个寄存器, 并且在连 续地址存取它们, 或者在内存地址空间或者在 I/O 地址空间. 在硬件级别上, 内存区和 I/O 区域没有概念上的区 ...

  10. Android Simulator Shortcut keys

    按钮 快捷键 Back Ctrl+Backspace Battery Ctrl+Shift+B Cellular Ctrl+Shift+C D-pad Ctrl+Shift+D Enter zoom ...