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 决策树基本流程 决策树模型 基本流程 在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多…...
Windows 10/11下MySQL 8.0.28安装失败?‘服务没有响应控制功能’报错保姆级修复指南
Windows平台MySQL安装报错终极解决方案:从"服务无响应"到完美运行 遇到MySQL安装过程中弹出"服务没有响应控制功能"的红色报错窗口时,很多开发者第一反应是重装系统或更换数据库——别急!这个看似复杂的错误其实90%以上源…...
FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战
1. 项目概述:单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时,翻到了Altera(现在已是Intel PSG的一部分)和Eutecus在2015年左右合作推出的一套方案,当时在EE Times上被称作“Single-Chip FPGA-B…...
veil:专为AI智能体设计的无头浏览器自动化工具
1. 项目概述:为AI智能体打造的“隐形之手”如果你正在构建或使用AI智能体,并且希望它能像真人一样操作浏览器——登录社交平台、发布内容、浏览网页、点击按钮——那么你很可能已经感受到了传统自动化工具的掣肘。Selenium、Puppeteer这些工具很棒&#…...
魔兽争霸3现代兼容性终极解决方案:WarcraftHelper深度优化指南
魔兽争霸3现代兼容性终极解决方案:WarcraftHelper深度优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经典即时战略…...
从零打造蒸汽朋克辉光管时钟:驱动方案、定制管与系统集成实战
1. 项目概述:从零开始的蒸汽朋克辉光管时钟作为一个在电子制作和复古硬件领域折腾了十多年的老玩家,我始终对那些散发着温暖橘红色光芒的辉光管(Nixie Tube)情有独钟。它们不仅仅是时间的显示器,更像是一件连接过去与未…...
AI时代开发者必备:生成式AI应用与核心工程能力双螺旋进阶
1. 项目概述:当AI成为你的新同事最近和几个带团队的朋友聊天,发现一个挺有意思的现象:团队里那些能熟练把AI工具“用起来”的开发者,和那些还在“观望”甚至“抵触”的开发者,在项目交付效率、问题解决深度上ÿ…...
跨境社媒账号做不稳 很多时候不是内容不够好而是气质不够稳定
很多团队做跨境社媒时,最容易把注意力集中在“内容创意”上。 选题够不够新,切口够不够巧,视频开头能不能抓住人,标题会不会让人点开,这些当然都重要。但真正做久了之后会发现,一个账号能不能长期跑起来&am…...
RK3368安卓9.0升级后卡Recovery?手把手教你分析串口日志定位NAND/EMMC分区问题
RK3368安卓9.0升级卡Recovery?串口日志深度分析与NAND/EMMC分区修复实战 当RK3368平台设备在升级Android 9.0固件后卡在Recovery界面时,这往往意味着底层存储设备的分区加载机制出现了问题。作为一名嵌入式开发者,能够从串口日志中抽丝剥茧定…...
Windows窗口置顶终极指南:AlwaysOnTop让你的重要窗口永不遮挡
Windows窗口置顶终极指南:AlwaysOnTop让你的重要窗口永不遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否厌倦了在多个窗口间来回切换,只为了查…...
从‘不好用的CE’到‘好用的OD’:一次逆向实战中的工具选择与思路转换
逆向工程实战:从工具局限到思维跃迁的破解之道 当那个MFC程序弹出第一个窗口时,我习惯性地打开了Cheat Engine——这个在游戏修改领域堪称神器的工具。但十分钟后,面对毫无进展的扫描结果和不断跳出的错误提示,我突然意识到&#…...
