SpringBoot--入门学习

SpringBoot的功能

2014年

1.自动配置(核心功能)

2.起步依赖(核心功能)

3.辅助功能

​ 嵌入式服务器

​ 将Tomcat变成了jar包,放到了SpringBoot里面

举例:maven中的tomcat插件,就是把tomcat变成了jar包

不含版本冲突问题

Springboot特点:约定大于配置

SpringBoot快速入门

案例需求:

​ 搭建Springboot工程,定义HelloController.hello()方法,返回"Hello SpringBoot"

实现步骤:

  1. ​ 创建Maven项目
  2. ​ 导入SpringBoot起步依赖
  3. ​ 定义Controller
  4. ​ 编写引导类
  5. ​ 启动测试

创建pom

引入SpringBoot工层需要的父类工程

<!--    SpringBoot工程需要继承的父类工程--> 
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
</parent>

Web开发起步依赖

<dependencies>
    <!--        SpringBoot web开发起步依赖-->        
    <dependency>            
        <groupId>org.springframework.boot</groupId>           	 		               <artifactId>spring-boot-starter-web</artifactId>        
    </dependency>    
</dependencies>

编写代码

编写web测试方法

public class UserController {    
    @RequestMapping("/sayHello")    
    public String sayHello(){        
        return "hello,my first SpringBoot";    
    }
}

调用SpringBoot–启用web 端口号8080

@SpringBootApplication//启动自动匹配注解等配置
//注意 Application类所在目录必须比需要匹配的类所在的
//目录更高级或者同一个目录
public class Application {    
    public static void main(String[] args) {        		                           SpringApplication.run(Application.class, args);    
    }
}

SpringBoot配置

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

配置文件分类

  • properties

  • xml

  • yml

此处以调整url为例

properties

server.port=8080
server.address=127.0.0.1

xml

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

yml(yaml)

server:
	port: 8080
	address: 127.0.0.1

同一目录下,配置文件的优先级问题-我的有错误…

很奇怪,我的顺序是 yaml>properties>yml

原因可能:目前版本是2.4.0;而资料都是2.4.0以下;

同一个目录下:

在这里插入图片描述

配置文件下的port设置:

在这里插入图片描述

在这里插入图片描述

查看了一下parent.pom:

<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>  
    <include>**/application*.yml</include>  
    <include>**/application*.yaml</include>  					     		     <include>**/application*.properties</include>
</includes>

正常来说,根据代码,顺序优先级应该为:

properties > yaml > yml

这个不用担心,基本不会配置重复的内容

yml(yaml)的配置格式

注意:在属性值":"后面一定要空一格,否则系统不会识别!!!

对象的属性值或者键值对

#单个键值对
name: jacklove
#对象(map)键值对的集合
user:  
	name: jack  
	pass: 123

数组

#数组(一组按次序排列的值)
girlfriend:  
	- xiaohong  
	- xiaoli

纯量

#纯量(单个的,不可再分的值)
msg1: 'ni \n hao'
msg2: "ni \n hao"

区别: msg1由 单引号 包括,不会识别转义字符,例如 \n;

​ msg2由 双引号 包括,能够识别转义字符

yml(yaml)的读取值的方法

方法一:@Vaule

对象的属性值或者键值对
@Value("${name}")
private String name;
@Value("${user.name}")
private String username;
@Value("${user.pass}")
private String password;

注意: @Value注解中的名称要 与 yaml中的保持一致

数组
@Value("${girlfriend[0]}")
private String name1;
@Value("${girlfriend[1]}")
private String name2;
纯量
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;

区别: msg1由 单引号 包括,不会识别转义字符,例如 \n;

​ msg2由 双引号 包括,能够识别转义字符

方法二:通过Environment 环境对象

//调用 spring的Environment对象
@Autowired
private Environment env;
//调用 getProperty()方法
// env.getProperty("xxx")  = @Value(${xxx})
env.getProperty("xxx") 

方法三:@ConfigurationProperties

注意: 与前两种方法不同,该方法的核心在于,先新建bean,然后将properties的值通过注解@ConfigurationProperties注入至该bean中,然后再通过调用 该对象,起到调用值的作用

新建bean

//首先,将其先纳入spring的管理
@Component
//通过该注解,告诉spring,将properties中的值注入该类,而person则是告知 注入的值来源于 properties中的person:的内容
@ConfigurationProperties( prefix = "person")
public class Person {

在Controller中进行调用即可

@Autowired
private Person person;

System.out.println("person.getName() = " + person.getName());
System.out.println("person.getAge() = " + person.getAge());

底层原理:

​ 根据properties中的属性名,寻找映射类中的set方法,通过set方法给对应属性赋值;

​ 类似于 spring中的 注入

红条处理:

在这里插入图片描述

在pom中,添加对应的依赖,详情可以点击open documentation查看

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

作用:可以使,我们的properties获得 如何书写将值输入bean的格式的提示信息

结果

在这里插入图片描述

Profile

类似于maven高级中学习的多环境配置.

​ dev开发环境:开发用的数据库A

​ pro生产环境:真实的数据库B

​ test测试环境:测试用的数据库C

需要做到项目在这三个模式间的来回切换激活

profile配置方式(2种)

方式一:多profile文件方式

提供多个配置文件,每一个代表一种环境

在这里插入图片描述

通过主配置文件(application.properties进行选择):

spring.profiles.active=dev
方式二:yml多文档方式

在yml中使用 — 分隔不同配置

application.yml/yaml

---
server:
  port: 8081
spring:
  profiles: dev
---
server:
  port: 8082

spring:
  profiles: test
---
server:
  port: 8083

spring:
  profiles: pro
---
spring:
  profiles:
      active: dev

在这里插入图片描述

补充:

如果 application.properties,yml,yaml同时存在,其判断顺序为

yaml > yml > properties

profile激活方式(3种)

核心代码: spring.profile.active=dev/test/pro

方式一:配置文件

在配置文件中配置:spring.profiles.active=dev

方式二:虚拟机参数

在VM option中进行配置:-Dspring.profiles.active=dev

在这里插入图片描述

方式三:命令行参数

跑jar,用cmd:

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

在这里插入图片描述

补充说明:

​ 1.关于以上配置方式中,“application-” 是springboot中配置文件的约定格式,不能改变;

还有就是可以把格式改成yml,语句改成yml的格式,还是可以正常运行的

​ 2.关于yml隔断的玩法 — 必须是3个"-",不能多也不能少,吐槽一下随着应用软件增多,yml的内容也会不断增多,导致后期维护不好处理

SpringBoot配置

内部配置加载顺序

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

  1. file: ./config/:当前项目下的/config目录下

  2. file: ./:当前项目的根目录

    (在resources文件夹外部,与模块同级)

  3. ​ classpath:/config/:classpath的/config目录

  4. ​ classpath:/:classpath的根目录

    (在resources文件夹内部)

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

在这里插入图片描述

补充说明:

基本不会在内部进行配置文件

​ 1.信息安全

​ 2.方便运维,调整配置文件,而不重新package

外部配置加载顺序

在这里插入图片描述

以上可以查看配置文档的说明以及加载顺序

  1. 通过命令行参数引用外部配置文件:java -jar xxx.jar --spring.config.location= E://application.properties/yml
  2. cmd命令行执行时,所在的目录的 /config/application.properties/yml配置文件
  3. cmd命令行执行时,所在的目录的application.properties/yml配置文件

PS:外部配置的优先级比内部配置都要高(除了内部的激活操作)

SpringBoot整合其他框架

SpringBoot整合Junit

步骤:

  1. 搭建SpringBoot工厂

  2. 引入starter-test起步依赖

  3. 编写测试类

  4. 添加测试相关注解

    @RunWith( SpringRunner.class )

    @SpringBootTest( classes = 启动类.class )

  5. 开启测试

注意:

​ @SpringBootTest不填写()内容时,会根据package结构,自动寻找 启动类.class;不过如果你的test结构 和 java结构没有保持一致,可能会报错!

​ @RunWith中的SpringRunner.class不能写错,否则会报错:找不到对应的bean

中间可能需要导入一下junit4

SpringBoot整合Mybatis

步骤:

  1. 搭建SpringBoot工厂

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

    mybatis-spring-boot-starter

    mysql-connector-java

  3. 编写DataSource和mybatis相关配置

  4. 定义表和实体类

  5. 编写dao和mapper文件/纯注解

  6. 测试

可能会报错:时区配置错误

解决方式:serverTimezone=UTC (UTC必须大写,否则不识别!!!)

在这里插入图片描述

在这里插入图片描述

配置文件:

spring:
	datasource:
		url: jdbc:mysql:///springboot?serverTimezone=UTC
		username: root
		password: root
		driver-class-name: com.mysql.cj.jdbc.driver
#如果不使用@select,则需要配置映射路径
mybatis:
	mapper-locations:	classpath:mapper/*Mapper.xml
	type-aliases-package:	com.itheima.springbootmybatis.domain

SpringBoot整合Redis

步骤:

  1. 搭建SpringBoot工厂
  2. 引入redis起步依赖
  3. 配置redis相关属性
  4. 注入RedisTemplate模板
  5. 编写测试方法,测试

导入依赖:

spring-boot-starter-data-redis

测试类:

在这里插入图片描述

redis默认的联机信息 就是本机的ip地址,如果是跨服务器的,还是需要自己进行配置的

配置文件:

spring:
	redis:
		host: 127.0.0.1
		port: 6363

拓展

SpringBoot陌生配置(mapper-locations)

在这里插入图片描述

无论是spring或者springboot都是调用 mybatis中 MapperScanConfigure类的方法的,是实际存在的.

​ mapper-locations对应在 spring中的 注入方法是啥呢?

在这里插入图片描述

setMapperLocations()方法

补充:

​ @MapperScan=(${xxx}) 可以替代spring-mybatisConfig中的MapperScanConfig配置;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值