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

java框架第五课(终极版本)SpringBoot

一.关于SpringBoot

(1)回忆Spring

传统的Spring由Spring 框架(ioc,aop)加mybatis加Springweb组成,虽然相比原生的java程序Spring框架帮我们大大减少了代码量,减少了冗余,提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多,导致我们在开发业务代码时常常需要大量精力去搞相关配置,还是不利于我们的开发,因此Spring 开发官方帮我们将Spring框架再次做了一个封装。

优点
开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。
控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间 的解耦。
面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。
spring 对于主流的应用框架提供了很好的支持,例如 mybatis。
spring 提供有自己的 mvc 实现。
缺点
虽然 spring 的组件代码是轻量级的,但它的配置却是重量级的
<!--aop:开启自动代理-->
<aop:aspectj-autoproxy/>
</bean><!-- 开启注解事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/><!--    开启 springweb 注解-->
<mvc:annotation-driven></mvc:annotation-driven>
虽然 spring 引入了注解功能,但是仍然需要编写大量的模板化配置文件。
项目的依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入大
量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而
来的不兼容问题就会严重阻碍项目的开发进度。
Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思
想.可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入
到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目
周期.

 (2)SpringBoot的简述

Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用 于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是 用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开 发者体验的工具。
Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样 板化的配置。它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ, Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用, 通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。
SpringBoot搭建过程简化体现:
(1)由于约定大于配置思想,把很多开发默认的做法直接简化。
(2)可以自动将相关的依赖加入进来(继承性,基础性)。
Spring Boot 你只需要“run”就可以非常轻易的构建独立的、企业级别的 spring 应用。
我们为 spring 平台和第三方依赖库提供了一种固定化的使用方式,使你能非常 轻松的开始开发你的应用程序。大部分 SpringBoot 应用只需要很少的配置。

 (3)SpringBoot的特点

创建独立的 spring 应用程序
直接内嵌 tomcat、jetty 和 undertow
提供了固定化的“starter”配置,以简化构建配置
尽可能的自动配置 spring 和第三方库
提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
绝对不会生成代码,并且不需要 XML 配置
springBoot 的核心功能
起步依赖
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
自动配置
Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时)
的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过程是 Spring 自动完成的。

二.SpringBoot开发环境的搭建 

(1)创建一个普通的 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 >

(2)创建基本包目录,在包下创建一个启动类,如下所示:

@SpringBootApplication

public class NewsApplication {
public static void main ( String [] args) {
SpringApplication . run ( NewsApplication . class );
}
}
Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot 应用相
当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序.

  

在线生成启动 logo:(有意思的小玩意)
https://www.bootschool.net/ascii-art
下载存放在 resources 目录下即可.

三.SpringBoot的配置文件

(1)配置的两种形式介绍

Spring Boot 使 用 一 个 全 局 的 配 置 文 件 ( 配 置 文 件 名 是 固 定 的 , 必 须 为application),用来存储项目中需要用到的各种配置参数。
配置文件格式有两种,一种为 properties 格式,一种 yaml 格式。
(1) application.properties 属性文件格式,内容为键值对。
server.port=8080
properties 格式比较简单,没有什么难度,在此我们以第二种 yaml 格式为例.
(2)application.yml
yml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.
yml 配置示例
server:
port: 8080
yaml 基本语法:
语法结构:key:空格 value;
以此来表示一对键值对(空格不能省略);
以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级
的;
字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
以#作为注释符

(2) SpringBoot数据访问管理

SpringBoot 数据访问管理
数据源配置
首先,为了连接数据库需要引入 jdbc 支持,在 pom.xml 中引入如下配置:
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-jdbc</ artifactId >
</ dependency >
记得添加 mysql 驱动依赖

(3)在 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

(4)SpringBoot整合阿里数据源 

导入阿里数据源 jar
在 yml 文件中注册阿里数据库连接池,连接数据库
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5 初始化时建立物理连接的个数
maxActive: 20 最大连接池数量
<!--阿里数据源-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version>
</dependency>

 (5)SpringBoot的注解

springboot 实现自动装配的核心仍然是使用注解标签,
@SpringBootApplication 是 springboot 核心注解,其中包含
@SpringBootConfiguration,@EnableAutoConfiguration, @ComponentScan.
@Configuration
加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法
并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被
Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean
名称,也就是小写的名称。
@Bean
相当于 XML 中的<bean></bean>,放在方法的上面,而不是类,意思是产生一
个 bean,并交给 spring 管理
package com.ffyc.news.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Collections;
@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();//1,允许任何来源corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*"));//2,允许任何请求头corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);//3,允许任何方法corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);//4,允许凭证corsConfiguration.setAllowCredentials(true);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);}
}

 (6)SpringBoot集成mybatis

jar包
< 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("接口所在
的包地址")

(7)SpringBoot统一异常处理

日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一 般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常 不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员 编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体 验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。
package com.ffyc.news.util;import com.ffyc.news.model.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
/*@RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来
开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。*/
@RestController
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public Result globalExceptionHandler(Exception e){Result result=new Result(500,"系统忙"+e.getMessage(),null);e.printStackTrace();return result;}}

相关文章:

java框架第五课(终极版本)SpringBoot

一.关于SpringBoot (1)回忆Spring 传统的Spring由Spring 框架(ioc,aop)加mybatis加Springweb组成&#xff0c;虽然相比原生的java程序Spring框架帮我们大大减少了代码量&#xff0c;减少了冗余&#xff0c;提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多&am…...

聚类案例——汽车是否值得购买

对汽车是否值得购买&#xff0c;进行聚类分析&#xff1a; 1、数据指标解释&#xff1a; buying, 购买费用 maint, 维修费用 doors, 车门数量 person, 乘坐人数 lug_boot, 行李箱容量 safety, 安全性 2、对数据进行转换 将字符串转换映射量化为数字 数据加载&#xff1a…...

网络编程9.10

使用数据库完成工人管理系统: ubuntuubuntu:DB$ ubuntuubuntu:DB$ cat 2.c #include <myhead.h> #include <sqlite3.h> #include <string.h>typedef struct {int id;char name[20];double salary; } Worker;int do_insert(sqlite3 *ppDb) {Worker work;pri…...

如何在SQL Server中恢复多个数据库?

一次性恢复多个 SQL数据库吗可以吗&#xff1f; "是的&#xff0c;可以一次性恢复多个 SQL 数据库。通常情况下&#xff0c;只要备份文件的名称与相应的数据库匹配&#xff0c;且没有附加的日期或时间信息&#xff0c;就可以通过有效的 T-SQL 脚本来完成恢复。如果你希望…...

炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)

大家是不是经常为SD WebUI卡顿、爆显存而苦恼?一启动SD 电脑就开始发烫&#xff0c; 尤其低显存用户屡屡"中招",不得不一遍遍重启。作为AI绘画的必备工具&#xff0c;WebUI却还有这么多"坑"&#xff0c;着实让人不爽!&#x1f620; 好消息是&#xff0c;…...

laserOdometry.cpp源码注释

本博客用于a-loam源码学习&#xff0c;用于和slam初学者一起学习。 #include <cmath>#include <nav_msgs/Odometry.h>#include <nav_msgs/Path.h> //这两行代码是C中包含头文件的指令&#xff0c;它们用于在ROS&#xff08;Robot Operating System&#xf…...

STM32时钟配置图详解

一图概述&#xff1a; 左侧输入时钟源 Input Frequency (LSE/LSI/HSI/HSE) LSE (Low-Speed External)&#xff1a;外部32.768 kHz晶体振荡器&#xff0c;通常用于RTC&#xff08;实时时钟&#xff09;。LSI (Low-Speed Internal)&#xff1a;内部低速时钟&#xff0c;频率为…...

Vscode——调试时,修改变量值

第一步&#xff1a;点击变量&#xff0c;鼠标右键 第二步&#xff1a;点击 设置值...

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西&#xff0c;你可以将它当作一个文字的“调库”行为&#xff0c;“调库”只需要知道库名就行了&#xff0c;这里实际也是如此。甚至你只需要知道你想问什么&#xff0c;将你的消息作为输入&#xff0c;就能从大模型得到输出。而这个“库…...

【AI编程助手】VsCode插件--通义灵码

目录 摘要 一、插件安装 二、“通义灵码” 使用 三、官网教程 四、总结 五、参考信息 摘要 通义灵码是一款强大的 AI 编程助手。它能够理解编程相关的复杂逻辑&#xff0c;为开发者提供高效、准确的代码生成与优化建议。在编程过程中&#xff0c;它可以辅助处理各种任务&…...

9月10号的学习

//界面1 头文件 signals://界面1的自定义信号void my_signal(); private slots:void on_pushButton_2_clicked();void on_pushButton_clicked(); //界面1 .cpp文件 void Widget::on_pushButton_2_clicked() {QMessageBox msg(QMessageBox::Warning,"警告","是否…...

QtC++截图支持窗口获取

介绍 在截图工具中你会发现&#xff0c;接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素&#xff0c;那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…...

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。...

springboot属性加载优先级和常见命令行属性

属性加载优先级&#xff1a; 1.SpringApplication&#xff1a;启动的main方法里注入的属性 2.PropertySource&#xff1a;通过注解 加载的数据配置文件 3.Config data file&#xff1a;application.yml/.properties 4.OS environment variable&#xff1a;环境变量 5.Command l…...

Math Reference Notes: 因式定理

文章目录 1. 因式定理的定义2. 因式定理的数学表达&#xff1a;3. 因式定理的推导4. 因式定理的含义5. 因式定理的应用6. 因式定理与余式定理的关系7. 因式定理的应用领域8.因式定理的局限性 因式定理是多项式代数中的一个重要工具&#xff0c;帮助我们通过多项式的根来因式分解…...

Kubernetes------Service

目录 一、属性说明 二、定义和基本配置 1、定义 2、创建Service 2.1、typeClusterIP 2.2、typeNodePort 2.3、固定IP访问 三、Service、EndPoint、Pod之间的关系 四、服务发现 1、基于Service中IP访问外部服务 2、基于Service中域名访问外部服务 五、Ingress的安装和使…...

C#的LINQ语句

在 C# 中&#xff0c;LINQ&#xff08;Language Integrated Query&#xff09;是一种强大的查询技术&#xff0c;它允许你使用熟悉的 C# 语法来查询数据集合。LINQ 可以用于查询各种数据源&#xff0c;包括数组、列表、数据集、SQL数据库等。 以下是一些基本的 LINQ 语句示例&…...

项目实战系列三: 家居购项目 第三部分

文章目录 &#x1f343;后台分页&#x1f345;后台分页导航 &#x1f343;首页分页&#x1f345;首页分页导航&#x1f345;首页搜索&#x1f345;两个奇怪的问题&#x1f345;会员显示登录名&#x1f345;注销登录&#x1f345;验证码 &#x1f343;后台分页 程序框架图 1.…...

【WPF】Border的使用

在 WPF 中&#xff0c;Border 控件是一个非常实用的容器控件&#xff0c;它可以用来为其他控件添加边框、背景颜色、边距等样式。Border 本身没有内置的行为&#xff0c;但是它可以包含一个子元素&#xff0c;并且可以通过各种属性来自定义外观。 Border基本属性 Child: 表示…...

机器学习(西瓜书)第 4 章 决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下&#xff0c;我们把当前结点标记为叶结点&#xff0c;并将其类别设定为该结点所含样本最多的类别&#xff1b;在第⑶种情形下&#xff0c;同样把当前结点标记为叶结点&#xff0c;但将其类别设定为其父结点所含样本最多…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...