SpringBoot快速入门(一)

一、SpringBoot概述

1.1 SpringBoot概念

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑也不之间进行思维切换,全身心的投入到逻辑也不的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

Spring 缺点

  • 配置繁琐
    • 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。
    • Spring2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。
    • Spring3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML
    • 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的事件。和所有框架一样,Spring很实用,但它要求的回报也不少。
  • 依赖繁琐
    • 项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库坐标,一旦选错里依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度

SpringBoot功能

  • 自动配置
    • SpringBoot的自动配置是一个运行时(共准确的说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
  • 起步依赖
    • 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
    • 简单地说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
  • 辅助功能
    • 提供了一些打响项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康监测、外部配置等。

SpringBoot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

二、SpringBoot快速入门

案例一

案例:需求

  • 搭建SpringBoot工程,定义HelloController.hello()方法,返回”Hello SpringBoot!“

案例:实现步骤

  • 创建Mavven项目

  • 导入SpringBoot起步依赖

    • <!--springboot工程需要继承的父工程-->
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.1.8.RELEASE</version>
      </parent>
      
      <dependencies>
          <!--web开发的起步依赖-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      </dependencies>
      
  • 定义Controller

    • @RestController
      public class HelloController {
      
          @RequestMapping("/hello")
          public String hello(){
              return "hello spring boot!";
          }
      }
      
  • 编写引导类

    • /**
       * 引导类:SpringBoot项目入口
       */
      @SpringBootApplication
      public class HelloApplication {
      
          public static void main(String[] args) {
              SpringApplication.run(HelloApplication.class);
          }
      }
      
  • 启动测试

    • http://localhost:8080/hello

小结

  • SpringBoot在创建项目时,使用jar的打包方式。
  • SpringBoot的引导类,是项目入口,运行main方法就可以启动的项目
  • 使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样

案例二

案例:需求

  • 使用idea快速构建SpringBoot工程。定义HelloController.hello()方法,返回“Hello SpringBoot!”
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三、SpringBoot配置文件

3.1 配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置

  • properties:

    • server.port=8080
  • yml:

    • server:
      	port: 8080
      
  • 在同一级目录下优先级为:properties > yml > yaml

3.2 yaml

YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,Java,Perl,C#,PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁

YAML文件的扩展名可以使用.yml或者.yaml

  • properties:

    • server.port=8080
      server.address=127.0.0.1
      
  • xml

    • <server>
      	<port>8080</port>
          <address>127.0.0.1</address>
      </server>
      
  • yml

    • server:
      	port: 8080
      	address: 127.0.0.1
      

YAML:基本语法

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

YAML:数据格式

  • 对象(map):键值对的集合

    • person:
      	name: zhangsan
      # 行内写法
      person: {name: zhangsan}
      
  • 数组:一组按次序排列的值

    • address:
      	- beijing
      	- shanghai
      # 行内写法
      address: [beijing,shanghai]
      
  • 纯量:单个的、不可再分的值

    • msg1: 'hello \n world' # 单引忽略转义字符
      msg2: "hello \n world" # 双引识别转义字符
      

TAML:参数引用

name: lisi

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

3.3 读取配置文件内容

  • @Value

    • @Value("${name}")
      private String name;
      
      @Value("${person.name}")
      private String name2;
      
      @Value("${address[0]}")
      private String address1;
      
      @Value("${msg1}")
      private String msg1;
      
      @Value("${msg2}")
      private String msg2;
      
  • Environment

    • @Autowired
      private Environment emv;
      
      @RequestMapping("/hello2")
      public void hello2() {
          System.out.println(emv.getProperty("person.name"));
          System.out.println(emv.getProperty("address[0]"));
          System.out.println(emv.getProperty("msg2"));
      }
      
  • @ConfigurationProperties

    • @Component
      @ConfigurationProperties(prefix = "person")
      public class Person {
          private String name;
          private int age;
          //省略get/set
      }
      
    • @Autowired
      private Person person;
      
      @RequestMapping("/hello2")
      public void hello2() {
          System.out.println(person);
      }
      

3.4 profile

我们在开发SpringBoot应用时,,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每一次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

profile配置方式

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

    • application-dev.properties/yml 开发环境
    • application-test.properties/yml 测试环境
    • application-pro.properties/yml 生产环境
  • yml多文档方式

    • 在yml中使用 --- 分隔不同配置

    • ---
      server:
        port: 8081
      spring:
        profiles: dev
      ---
      server:
        port: 8082
      spring:
          profiles: por
      ---
      server:
        port: 8083
      spring:
        profiles: test
      ---
      spring:
        profiles:
          active: pro
      

profile激活方式

  • 配置文件:在配置文件中配置:spring.profiles.active=dev
  • 虚拟机参数:在VM options指定:-Dspring.profiles.active=dev
  • 命令行参数:java -jar xxx.jar --spring.profiles.active=dev

3.5 内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

  • file:./config/:当前项目下的/config目录下
  • file:./:当前项目的根目录
  • classpath:/config/:classpath的/config目录下
  • classpath:/:classpath的根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效

3.6 外部配置加载顺序

通过官网查看外部属性加载顺序:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

四、SpringBoot整合其他框架

4.1 SpringBoot整合Junit

案例:需求

  • SpringBoot整合Junit

案例:实现步骤

  • 搭建SpringBoot工程

  • 引入starter-test起步依赖

    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      
  • 编写测试类

    • @RunWith(SpringRunner.class)
      @SpringBootTest(classes = SpringbootTestApplication.class)
      public class UserServiceTest {
      	
      }
      
  • 添加测试相关注解

    • @RunWith(SpringRuner.class)
    • @SpringBootTest(classes=启动类.class)
  • 编写测试方法

    • @RunWith(SpringRunner.class)
      @SpringBootTest(classes = SpringbootTestApplication.class)
      public class UserServiceTest {
      
          @Autowired
          private UserService userService;
      
          @Test
          public void testAdd(){
              userService.add();
          }
      }
      

4.2 SpringBoot整合Redis

案例:需求

  • SpringBoot整合Redis

案例:实现步骤

  • 搭建SpringBoot工程

  • 引入redis起步依赖

    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      
  • 配置redis相关属性

    • spring:
        redis:
          host: 127.0.0.1  #redis的主机ip
          port: 6379
      
  • 注入RedisTemplrte模板

    • @Autowired
      private RedisTemplate redisTemplate;
      
  • 编写测试方法,测试

    • @Test
      public void testSet() {
          //存入数据
          redisTemplate.boundValueOps("name").set("zhangsan");
      }
      
      @Test
      public void testGet() {
          //获取数据
          Object name = redisTemplate.boundValueOps("name").get();
          System.out.println(name);
      }
      

4.3 SpringBoot整合MyBatis

案例:需求

  • SpringBoot整合MyBatis

案例:实现步骤

  • 搭建SpringBoot工程

  • 引入mybatis起步依赖,添加mysql驱动

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  • 编写DataSource和MyBatis相关配置

    • # datasource
      spring:
        datasource:
          url: jdbc:mysql:///springboot?serverTimezone=UTC
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
          
      #mybatis
      #配置文件方式使用
      mybatis:
        mapper-locations: classpath:mapper/*Mapper.xml #mapper映射文件路径
        type-aliases-package: com.wangkai.springbootmybatis.domain
        # config-location: # 指定mybatis的核心配置文件
      
    • @Mapper
      @Repository
      public interface UserMapper {
          @Select("select * from t_user")
          public List<User> findAll();
      }
      
  • 定义表和实体类

    • public class User {
          private int id;
          private String name;
          private String password;
      }
      
  • 编写dao和mapper文件/纯注解开发

    • @Mapper
      @Repository
      public interface UserMapper {
          @Select("select * from t_user")
          public List<User> findAll();
      }
      
  • 测试

    • @Autowired
      private UserMapper userMapper;
      
      @Test
      public void testFindAll() {
          List<User> list = userMapper.findAll();
          System.out.println(list);
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯凯凯凯.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值