当前位置: 首页 > news >正文

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 定时任务

在项目中经常会有一些功能需要在特定的时间完成特定的操作,这时就需要用到定时器。

开启定时器有两种办法:

  1. 使用 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());
}
}

http://www.dtcms.com/a/362155.html

相关文章:

  • 线上API接口响应慢?一套高效排查与定位问题的心法
  • PyTorch 面试题及详细答案120题(96-105)-- 性能优化与调试
  • Java类的初始化顺序
  • 问题解决方法:qt的设计师页面怎么开启scroll area组件的滚轮功能
  • 【ElasticSearch实用篇-04】Boost权重底层原理和基本使用
  • 机器学习入门,非线性模型的预测方法之多项式
  • 后端笔试题-多线程JUC相关
  • M13 噬菌体展示技术:载体与结构深度解析
  • Git软件版本控制
  • 贵州在假期及夏天结束后保持旅游活力的策略分析
  • elasticsearch中文分词器analysis-ik使用
  • 《山东棒球》板球比赛规则·棒球1号位
  • c语言2:关于变量
  • Robomaster电机控制和serialplot串口绘图(通用)
  • 定时器设计之->分级时间轮
  • Kubernetes 中根据 Pod IP 查找 Pod 及关联服务的方法
  • 蜂窝物联网模组:电动两轮车新国标实施下的关乎安全与智能化支撑
  • 车辆轨迹数据实时同步方案:从 “定时轮询” 到 “消息驱动” 的升级实践
  • Qt Widgets 之 QAbstractButton
  • UCIE Specification详解(十一)
  • 传输层TCP 与 安全层SSL/TLS
  • 【运维篇第四弹】《详解读写分离》什么是读写分离?如何配置一主一从读写分离以及双主双从读写分离?都会在这一篇文章中掌握
  • The Algorithmic Foundations of Differential Privacy - 1
  • 初识JVM
  • Linux之Docker虚拟化技术(三)
  • STM32项目分享:基于单片机的图书馆座位监测系统
  • docker-nacos-v3
  • 告别发票山,拥抱高效流:一位财务经理的“解放”宣言
  • 第四次工业革命简史:从图灵测试到ChatGPT的AI革命
  • ModelScope 开发环境配置指南