SpringBoot梳理
一 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基本语法:
# 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 命令行参数:
注意:说到命令行参数这块,我们在运行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自动配置和自动加载等,待续....