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 程序.

三.SpringBoot的配置文件
(1)配置的两种形式介绍
Spring Boot 使 用 一 个 全 局 的 配 置 文 件 ( 配 置 文 件 名 是 固 定 的 , 必 须 为application),用来存储项目中需要用到的各种配置参数。配置文件格式有两种,一种为 properties 格式,一种 yaml 格式。(1) application.properties 属性文件格式,内容为键值对。server.port=8080properties 格式比较简单,没有什么难度,在此我们以第二种 yaml 格式为例.(2)application.ymlyml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.yml 配置示例server:port: 8080yaml 基本语法:语法结构: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 中配置数据源信息
(4)SpringBoot整合阿里数据源
<!--阿里数据源--> <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 >
(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组成,虽然相比原生的java程序Spring框架帮我们大大减少了代码量,减少了冗余,提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多&am…...
聚类案例——汽车是否值得购买
对汽车是否值得购买,进行聚类分析: 1、数据指标解释: buying, 购买费用 maint, 维修费用 doors, 车门数量 person, 乘坐人数 lug_boot, 行李箱容量 safety, 安全性 2、对数据进行转换 将字符串转换映射量化为数字 数据加载:…...
网络编程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数据库吗可以吗? "是的,可以一次性恢复多个 SQL 数据库。通常情况下,只要备份文件的名称与相应的数据库匹配,且没有附加的日期或时间信息,就可以通过有效的 T-SQL 脚本来完成恢复。如果你希望…...
炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)
大家是不是经常为SD WebUI卡顿、爆显存而苦恼?一启动SD 电脑就开始发烫, 尤其低显存用户屡屡"中招",不得不一遍遍重启。作为AI绘画的必备工具,WebUI却还有这么多"坑",着实让人不爽!😠 好消息是,…...
laserOdometry.cpp源码注释
本博客用于a-loam源码学习,用于和slam初学者一起学习。 #include <cmath>#include <nav_msgs/Odometry.h>#include <nav_msgs/Path.h> //这两行代码是C中包含头文件的指令,它们用于在ROS(Robot Operating System…...
STM32时钟配置图详解
一图概述: 左侧输入时钟源 Input Frequency (LSE/LSI/HSI/HSE) LSE (Low-Speed External):外部32.768 kHz晶体振荡器,通常用于RTC(实时时钟)。LSI (Low-Speed Internal):内部低速时钟,频率为…...
Vscode——调试时,修改变量值
第一步:点击变量,鼠标右键 第二步:点击 设置值...
1. 初识LLM API:环境配置与多轮对话演示
其实AI应用并不是一个什么很高大上的东西,你可以将它当作一个文字的“调库”行为,“调库”只需要知道库名就行了,这里实际也是如此。甚至你只需要知道你想问什么,将你的消息作为输入,就能从大模型得到输出。而这个“库…...
【AI编程助手】VsCode插件--通义灵码
目录 摘要 一、插件安装 二、“通义灵码” 使用 三、官网教程 四、总结 五、参考信息 摘要 通义灵码是一款强大的 AI 编程助手。它能够理解编程相关的复杂逻辑,为开发者提供高效、准确的代码生成与优化建议。在编程过程中,它可以辅助处理各种任务&…...
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++截图支持窗口获取
介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…...
料品档案没有配置主供应商信息
这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示,也让人摸不着头脑。只能是记下来备用吧。...
springboot属性加载优先级和常见命令行属性
属性加载优先级: 1.SpringApplication:启动的main方法里注入的属性 2.PropertySource:通过注解 加载的数据配置文件 3.Config data file:application.yml/.properties 4.OS environment variable:环境变量 5.Command l…...
Math Reference Notes: 因式定理
文章目录 1. 因式定理的定义2. 因式定理的数学表达:3. 因式定理的推导4. 因式定理的含义5. 因式定理的应用6. 因式定理与余式定理的关系7. 因式定理的应用领域8.因式定理的局限性 因式定理是多项式代数中的一个重要工具,帮助我们通过多项式的根来因式分解…...
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# 中,LINQ(Language Integrated Query)是一种强大的查询技术,它允许你使用熟悉的 C# 语法来查询数据集合。LINQ 可以用于查询各种数据源,包括数组、列表、数据集、SQL数据库等。 以下是一些基本的 LINQ 语句示例&…...
项目实战系列三: 家居购项目 第三部分
文章目录 🍃后台分页🍅后台分页导航 🍃首页分页🍅首页分页导航🍅首页搜索🍅两个奇怪的问题🍅会员显示登录名🍅注销登录🍅验证码 🍃后台分页 程序框架图 1.…...
【WPF】Border的使用
在 WPF 中,Border 控件是一个非常实用的容器控件,它可以用来为其他控件添加边框、背景颜色、边距等样式。Border 本身没有内置的行为,但是它可以包含一个子元素,并且可以通过各种属性来自定义外观。 Border基本属性 Child: 表示…...
机器学习(西瓜书)第 4 章 决策树
4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
