SpringBoot梳理

wuchangjian2021-11-04 03:14:25编程学习

 一 SpringBoot基础信息:

概述

SpringBoot并不是Spring的新技术,只是提供了一种快速使用Spring体系的架构,其实就是对Sping做了的技术统一集成,形成一套最优的搭配方案!!简化使用Spring的难度!!!

结论:只是名字高大上,其实使用很简单,没有什么难度!!!

Spring使用的缺点

依赖搭配繁琐,各个层级的jar包依赖优点混乱,配置比较的繁琐!用过的都知道,配置文件简直是有点难搞,反正我是记不住,弄模板修改的!

SpringBoot项目创建和结构解析(忽略):

 

 

这个要说明一下,SpringBoot项目的打包方式为jar包!! 

SpringBoot的自动配置:

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个Bean,不该用哪个Bean。该过程是SpringBoot自动完成的。

这块大有研究,在SpringBoot的注解追踪中可以看到,后面对这块做详细的解释!

SpringBoot的起步依赖:

SpringBoot的起步依赖其实就是所有的SpringBoot项目起步都以依赖的父类!这个父类提供了一套最优的技术搭配版本,对各个版本的技术做了版本锁定!注意,只是版本锁定,并不是依赖引入,在需要使用时候在maven的pom文件中指明需要的依赖,然后根据起步依赖中的本版进行引入!这个是基于maven依赖传递进行的!关于maven的高级使用,后期有时间我在做专门的梳理!!!!

SpringBoot的起步依赖!

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>

从起步依赖一直追踪下去就可以看待如下信息,看到这就该明白起步依赖只是做了版本控制!! 

目录

 一 SpringBoot基础信息:

概述:

SpringBoot的自动配置:

SpringBoot的起步依赖:

二 SpringBoot的配置文件

SpringBoot的常用三种配置文件:

yaml/yml基本语法:


创建完成的SpringBooot的引导类。。。。。。。。,没啥好说的,就那样了!但是必须注意,在SpringBoot项目中 ,引导类必须位于其他类的上层目录,最多支持其他类和引导类同级别,但是绝对不允许其他类处于引导类之前的目录,否则其他类注解信息不会被扫描到!!

@SpringBootApplication
public class InitbootApplication {

	public static void main(String[] args) {
		SpringApplication.run(InitbootApplication.class, args);
	}

}

 注意:SpringBoot是对Spring使用的简化,并不是新技术。。。。。。!!!!啦啦啦啦

二 SpringBoot的配置文件

SpringBoot的常用三种配置文件:

SpringBoot的配置文件默认名字为appiclaition:

application.properties

application.yaml

application.yml

配置文件优先级别

在同一个文件目录下SpringBoot配置文件优先级别为properties,yml,yaml

propeties文件格式忽略,yaml和yml其实就是同一个文件,只是后缀名不同而已!

yaml/yml基本语法:

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

#Map类型数据,键值对类型
persion:
  name: zhangsan
  age: 23

# 行内写法
persion2: {name: lisi,age: 24}

# 数组类型
hobby:
  - eat
  - drink
  - play
  - sing
# 行内写法
hobby2: {吃,喝,玩,乐}

# 单个数据写法:
#  双引号内的转义字符可以别识别,但是单引号的转义字符不能被识别
message1: '转义字符\n识别'
message2: "转义字符\n识别"

# 参数引用,通过美元符号引用配置文件中的其他指
eg: ${message1}

配置文件中数据获取,主要是ymal,其实properties文件中的数据也可以这样去获取!


@RestController
public class GetDateController {

    @Value("${test}")
    private String test;
    @Value("${eg}")
    private String eg;
    @Value("${persion.name}")
    private String name;
    @Value("${persion2.age}")
    private String age;
    @Value("${hobby[1]}")
    private String hobby;
    @Value("${message1}")
    private String message1;
    @Value("${message2}")
    private String message2;

    @RequestMapping("/first")
    public String getDate1() {
        System.out.println(test);
        System.out.println(eg);
        System.out.println(name);
        System.out.println(age);
        System.out.println(hobby);
        System.out.println(message1);
        System.out.println(message2);
        return "seccussful";
    }

    /**
     * 获取yml文件中数据第二种方式
     */
    /**
     * 获取当前激活的配置文件信息
     * String[] defaultProfiles = environment.getDefaultProfiles();
     * String[] defaultProfiles1 = environment.getDefaultProfiles();
     */
    @Autowired
    private Environment environment;


    @RequestMapping("/second")
    public String getDate2() {
        String test = environment.getProperty("test");
        System.out.println(this.test);
        String eg = environment.getProperty("eg");
        System.out.println(this.eg);
        return "seccussful";
    }

    /**
     * 获取数据第三种方式:
     * 需要使用注解:@ConfigurationProperties,同时将javabean标注为Spring管理识别的bean,@Compent
     */
    @Autowired
    private Persion persion;

    @RequestMapping("/thried")
    public String getDate3() {
        System.out.println(persion);
        return "seccussful";
    }
}

第三种获取数据方式需要的注解坐标!不要也行,不影响!

/**
 * 若是想解决本类上面报错找不到注解,在坐标中引入下面即可:
 *    <dependency>
 * 			<groupId>org.springframework.boot</groupId>
 * 			<artifactId>spring-boot-configuration-processor</artifactId>
 * 			<optional>true</optional>
 * 		</dependency>
 */
@Component
/**
 * 添加前缀,根据ymal文件前缀来,若是最简单的类型,直接写即可,不需要前缀
 */
@ConfigurationProperties(prefix = "persion")
public class Persion {
    private String name;
    private String age;
//get,set方法必须拥有,这块省略
}

补充,获取当前使用的配置文件信息

@Autowired private Environment environment;
​​​​​​​/**
 * 获取当前激活的配置文件信息
 * String[] defaultProfiles = environment.getDefaultProfiles();
 * String[] defaultProfiles1 = environment.getDefaultProfiles();
 */

三 SpringBoot切换配置文件:

概述:其实就是配置多个环境的配置文件,根据情况进行对应的配置文件激活(配置这些的同时必须有主配置文件,激活这些配置文件的三种方式之一就是在主配置文件中进行激活的):

application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境

其中在yml文件中还可以使用---作为分割符号进行多片段的配置!

  示例:

---
# 修改项目的访问路径 默认值为
server.servlet.context-path: /hello1
server.port: 8081
spring.profiles: dev # 起名字
---
server.servlet.context-path: /hello2
server.port: 8082
spring.profiles: test # 起名字
---
server.servlet.context-path: /hello3
server.port: 80
spring.profiles: run # 起名字
---
##激活文件
spring:
  profiles:
    active: run

激活配置文件的方式:

1在主配置文件中激活:

properties中激活的方式:spring.profiles.active=dev

yml激活的方式:上面案例有

2 虚拟机参数:

在VM options 指定:-Dspring.profiles.active=dev

3 命令行参数

java –jar xxx.jar --spring.profiles.active=dev

注意:说到命令行参数这块,我们在运行SpringBoot项目时候可以在命令行进行一些简单的参数指定:

java -jar .\initboot-0.0.1-SNAPSHOT.jar --server.port=88

SpringBoot配置文件加载顺序:

示例项目path:D:\summary\SpringBootStudy\initboot

优先级别最高的是initboot同目录级别下的config目录下配置文件,接下来是initboot同目录级别的配置文件,这两个目录下的配置文件称为外置配置文件(不过这个是idea目录依据,打包配置文件不会被打进去),接下来就是resources目录下config目录下的配置文件,最后才是resources中的配置文件,结论就是外置配置文件优先级别会高于内置配置文件的优先级别!

知道这个我们就可以在项目打包后若是有问题,找到当前项目的jar包,在项目的jar包下创建config文件目录,或者配置文件,对已经的包的项目进行配置文件的替换!

四 SpringBoot整合junit

坐标(快速创建自己就会加载):        

<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 {

    @Autowired
    private UserService userService;

    @Test
    public void test() {
        
    }
}

五 SpringBoot整合MyBatis:

坐标创(建项目时候勾选即可):

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <!--<scope>runtime</scope>-->
</dependency>

SpringBoot配置文件:

properties类型的

# 修改项目的访问路径 (虚拟目录),默认值为/
server.servlet.context-path=/hello
# ?serverTimezone=UTC做时区标准化,否则报错
spring.datasource.url=jdbc:mysql:///springboot?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver一样的,前面新版本,后面老版本
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# mybatis
# mapper映射文件路径,若是mapper文件存放路径和接口窜访的路径相同则这块不需要指明mapper
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.springbootmybatis.domain
# config-location:  # 指定mybatis的核心配置文件

yml类型的:

# datasource
spring:
  datasource:
    # ?serverTimezone=UTC做时区标准化,否则报错
    url: jdbc:mysql:///springboot?serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver


# mybatis
mybatis:
  # mapper映射文件路径,若是mapper文件存放路径和接口窜访的路径相同则这块不需要指明mapper
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.springbootmybatis.domain
  # config-location:  # 指定mybatis的核心配置文件

mybatis映射文件头:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=".......">

</mapper>

mapper接口:

@Mapper
@Repository
public interface UserMapper {

    @Select("select * from t_user")
    public List<User> findAll();
}

注解解释:

@Mapper类注解(接口是特殊的类),标注当前类是一个映射文件接口,MyBatis注解!

@Repository注解,在注入这个接口类会报错,这个加上就没了,这个是个持久层注解,其实就是@Compent没啥好说的!

注意:MyBatis的映射文件在SpringBoot的配置文件中做了位置声明,若是没有声明就需要和接口处于同一个目录下,需要在Resources下创建和接口相同的目录!声明和创建二者选其一即可!

mybatis.mapper-locations=classpath:mapper/*Mapper.xml

就这样,完事!啦啦啦啦啦啦啦啦啦啦啦啦!!!!!

六 SpringBoot整合redis

坐标(创建时候勾选即可):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 SpringBoot的配置文件:

application.properties类型

#redis的主机ip
spring.redis.host=127.0.0.1
spring.redis.port=6379

 application.yml类型

spring:
  redis:
    host: 127.0.0.1 # redis的主机ip
    port: 6379
RedisTemplate 的使用简单示例(查看Api,关于redis相关的后面有时间再做系统的梳理):
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRedisApplicationTests {

    @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);
    }
}

 就这样吧,没啥好说的!!!!!!啦啦啦啦啦啦啦啦啦啦啦!

关于SpringBoot自动配置和自动加载等,待续....

相关文章

数学分析

(1)  (2)  ...

预解析 、变量提升

     <script>           f1();      //...

呼叫中心系统通话原理是什么

呼叫中心系统通话原理是什么

小易在日常工作中发现,有很多人并不了解呼叫中心系统是如何实现通话的...

安全等保测评:RHEL8/Centos8操作系统如何设置密码策略及复杂度

安全等保测评:RHEL8/Centos8操作系统如何设置密码策略及复杂度

在上周刚配合了Linux操作系统安全等保的测评,密码策略及复杂性是必须的最...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。