SpringBoot的基础介绍,用法和配置
为什么会推出一款全新的SpringBoot?
虽然Spring已经取得了非常大的成功,他的优点非常的多,将创建方法的权利给了Spring架构使我们程序员写代码更加的便利。
但是Spring也有很多的缺点:
- 配置麻烦,而且很多都是模板化的配置
- 需要依赖很多的jar 例如web层依赖jackson组件,需要我们自己加入依赖. 版本也有可能不匹配,一旦我们加入错误的jar包或者版本不匹配的话就会报错
所以,基于以上缺点,SpringBoot横空出世,它的出现不是为了取代Spring,而是为了解决Spring的问题,是为了简化Spring的搭建。
Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样 板化的配置。它集成了大量常用的第三方库配置。(例如 Redis,RocketMQ,Quartz 等等),Spring Boot 应用中第三方库几乎可以零配置的开箱即用,通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导 者。
所谓约定大于配置就是在开发人员圈子中大家公认要做的事情,比如我们要手动开启Spring事务管理,但是这是一个项目必须要做的,所以SpringBoot就帮我们完成了
SpringBoot 开发环境构建
创建一个普通的 maven 项目
在 pom.xml 文件中添加以下配置
<!--依赖的父级工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<!--指定 jdk 版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--添加基本的 springweb 依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
</plugins>
</build>
创建基本包目录,在包下创建一个启动类,如下所示:
@SpringBootApplication
public class NewsApplication {
public static void main(String[] args) {
SpringApplication.run(NewsApplication.class);
}
}


SpringBoot内部集成了一个maven服务器,我们只需要启动启动类就可以,一个SpringBoot应用就是一个独立的服务。

Spring Boot 配置文件
Spring Boot 使 用 一 个 全 局 的 配 置 文 件 ( 配 置 文 件 名 是 固 定 的 , 必 须 为
application),用来存储项目中需要用到的各种配置参数.
配置文件格式有两种,一种为 properties 格式,一种 yaml 格式.
application.properties 属性文件格式,内容为键值对
server.port=8080
properties 格式比较简单,没有什么难度,在此我们以第二种 yaml 格式为例

可以看到yaml中的格式有严格的分级意识,最大的一级定格写,他的字节则往后空两个以此类推
以及我们在给配置赋值的时候必须空一格
SpringBoot 数据访问管理
首先为了链接数据库我们需要导入jdbc的jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
还有mysql的驱动:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency>
在 application.yml 中配置数据源信息
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
SpringBoot 整合阿里数据源
导入阿里数据源 jar
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>
在 yml 文件中注册阿里数据库连接池
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5 初始化时建立物理连接的个数
maxActive: 20 最大连接池数量
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/newsdb?serverTimezone=Asia/Shanghaiusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5 #初始化时建立物理连接的个数maxActive: 20 #最大连接池数量main:allow-circular-references: true #开始支持spring循环依赖redis:host: 127.0.0.1port: 6379password:database: 0pool:max-active: 8 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 8 # 连接池中的最大空闲连接min-idle: 0 # 连接池中的最小空闲连接timeout: 5000ms # 连接超时时间(毫秒)
SpringBoot 集成 mybatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
在 application.yml 中配置数据源信息:
mybatis:
type-aliases-package: com.ff.cms.bean
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
启动类上添加@MapperScan("接口所在的包地址")@MapperScan("接口所在
的包地址")

SpringBoot 统一异常处理
我们在代码的过程中,难免会出现有的程序会抛出异常,我们一般都是用try chatch的方式捕获或者直接throw抛出不管。不管是那种方式都太过的繁琐和麻烦,而解决这一问题,统一的异常处理就是一个不错的选择。
Springboot 对 于 异 常 的 处 理 也 做 了 不 错 的 支 持 , 它 提 供 了 一
个 @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来
开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 异常处理
*/
@ExceptionHandler(Exception.class)
public CommonResult globalException(Exception e) {
CommonResult commonResult = new CommonResult(500,e.getMessage());
return commonResult;
}
}
SpringBoot 定时任务
在项目中经常会有一些功能需要在特定的时间完成特定的操作,这时就需要用到定时器。
开启定时器有两种办法:
- 使用 java 自带的 TimerTask,Timer
我们需要创建一个TimerTask对象,重写里面的run方法。
创建一个Timer计时器对象,调用里面的schedule方法来启动定时任务,
public static void main(String[] args) {
// 定义一个任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("打印当前时间:" + new Date());
}
};
// 计时器
Timer timer = new Timer();
// 开始执行任务 (延迟 1000 毫秒执行,每 3000 毫秒执行一次)
timer.schedule(timerTask, 1000, 3000);
}
2.使用SpringBoot中提供的定时任务
在 SpringBoot 的启动类上声明 @EnableScheduling
@Component
public class TestTask {
@Scheduled(cron = "*/6 * * * * ?")
private void process() {
System.out.println("现在时间:" + new Date());
}
}