24.12.30 SpringBoot

SpringBootDay

什么是SpringBoot?

Spring的一站式解决方案

Spring项目的开关,Spring全家桶的入口++

也是未来学习其他的框架的基础,所有框架的整合,都要基于SpringBoot

  • 优点

简化了Spring项目的创建,运行,调试,部署,配置等等步骤

更专注于业务的开发,不去过多的关注配置

只需要按照约定(约定大于配置),集成配置好的框架,就可以使用

在SpringBoot项目创建的那一刻,它已经和许多框架整合完了

并且解决了大部分的依赖问题,解决了大部分的jar包冲突问题(仅限于特定版本之间)

  • 缺点

过于优秀

创建项目

https://start.aliyun.com

//SpringBoot项目的启动类
//Component-scan  默认会扫描,当前启动类所在的包
//创建Controller的时候,需要注意,要按照约定,把包创建到com.javasm.bootdemo路径下
//如果不想按照约定来,需要手动添加 @ComponentScan("com.javasm")
//启动默认的端口号是8080,是没有项目路径的
@SpringBootApplication
public class Bootdemo1Application {//整个程序的入口public static void main(String[] args) {//Spring容器对象//创建Spring容器ApplicationContext applicationContext = SpringApplication.run(Bootdemo1Application.class, args);}}

查看代码

自动配置

SpringBoot ,默认使用的是Tomcat服务器

启动注解

打包

在创建springboot项目时自带了这个依赖,但是<skip>true</skip>没有注释

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><!--打包:打包jar包 运行jar包必须有一个main方法,作为程序入口--><!--仅仅影响打包,不影响日常开发--><mainClass>com.javasm.bootdemo.Bootdemo1Application</mainClass><!--<skip>true</skip>--></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin>

运行jar包之前,要确保idea中的程序是停止的

java -jar  包名

包名太长,使用tab键补齐

如果不停止,提示8080端口被占用

Banner

https://www.bootschool.net/
背景颜色${AnsiBackground.BRIGHT_GREEN}
字体颜色${AnsiColor.BRIGHT_RED}
版本信息${spring-boot.formatted-version}

在resources路径下,创建文件

  • banner.txt
  • banner.jpg
  • banner.gif

配置文件

默认情况下

  • application.properties
    • 优先级更高
  • application.yml
  • application.yaml

yaml/yml

使用空格,作为层级,[不能使用tab]
相同的缩进表示相同的层级,只看空格的数量
通常情况下,默认的贵则:2个空格算1层
阅读性,要比.properties的配置文件好
属性和值之间,不能挨着,要有1个空格
YAML语法规则:
1、大小写敏感 
2、使用缩进表示层级关系 
3、禁止使用tab缩进,只能使用空格键 
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 
5、使用#表示注释 
6、字符串可以不用引号标注

javasm:name: xiaomingage: 12company:name: shangmaaddress: 863nameList:- xiaoming- xiaoqiang- lileitmap:{1001:abc,1002:aaa}arr1:[aaa,bbb,ccc]ctime:2024/12/30 11:11:11

使用自己的类,读取配置文件中的值

日常开发的时候,很少用到读取配置文件中的自定义属性
当你要配置一个新的框架(SpringBoot官方没有自动配置,框架本身也没有对SpringBoot自动配置)
配置好了框架之后,需要给框架源码的配置赋值的时候

  • 引入依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
  • 实体类读取
@Component
@Data
@ConfigurationProperties(prefix = "javasm")
public class TestModel {private String name;private String password;private Integer age;private List<String> nameList;private Map<Integer,String> tmap;private String[] arr1;private Date ctime;private Company company;}@Data
public class Company {private String name;private String address;
}
    @ResourceTestModel testModel;@GetMapping("/f2")public TestModel f2(){return testModel;}

静态资源文件

默认情况下,resources文件夹里的static文件夹,是用来存放静态资源文件的

异常处理

  • 应付面试
@Component
public class TestErrorAttributes extends DefaultErrorAttributes {@Overridepublic Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {//如果是浏览器访问,返回的是错误页面//如果是访问接口,返回的是json数据Map<String, Object> map = super.getErrorAttributes(webRequest, options);System.out.println(map);map.put("code",3000);map.put("msg","异常信息");return map;}
}

实际使用

定义异常返回值

@AllArgsConstructor
@Getter
//默认情况下,json把enum转成json字符串的时候,是"ParameterNull",需要加上注解
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum JavasmExceptionEnum {ParameterNull(1001,"参数为空");private Integer code;private String msg;
}

自定义异常类

@Getter
public class JavasmException extends RuntimeException{JavasmExceptionEnum exceptionEnum;public JavasmException(JavasmExceptionEnum exceptionEnum) {super(exceptionEnum.getMsg());this.exceptionEnum = exceptionEnum;}
}

@RestControllerAdvice
public class JavasmExceptionAdvice {//处理自定义异常@ExceptionHandler(JavasmException.class)public ResponseEntity<JavasmExceptionEnum> f1(JavasmException e){JavasmExceptionEnum exceptionEnum = e.getExceptionEnum();return ResponseEntity.status(HttpStatus.OK).body(exceptionEnum);}//这样写也可以public JavasmExceptionEnum f2(JavasmException e){return e.getExceptionEnum();}
}

测试

    @GetMapping("/f1")public R f1(Integer id){if (id == null){//自定义异常//只有在 抛出异常的代码,才知道这个是什么异常//throw new JavasmException("1000","参数不合法");throw new JavasmException(JavasmExceptionEnum.ParameterNull);}return R.ok("Hello  Boooooook");}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {private Integer code;private String msg;private Object data;public R(Integer code, String msg) {this.code = code;this.msg = msg;}public static R ok(){return new R(200,"success");}public static R ok(Object data){return new R(200,"success",data);}}

MyBatis整合

  • 导入依赖
        <!--Mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--Druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><!--mybatis,去掉默认的连接池HikariCP--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version><exclusions><exclusion><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></exclusion></exclusions></dependency>
  • 修改配置文件application.yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/qingqing?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: rootdruid:initial-size: 5max-active: 100min-idle: 10
mybatis:mapper-locations: classpath:mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 修改启动类
@SpringBootApplication
//扫描的是dao的路径,mybatis中,把dao称为mapper
@MapperScan("com.javasm.bootdemo.*.dao")
public class Bootdemo1Application {public static void main(String[] args) {SpringApplication.run(Bootdemo1Application.class, args);}
}
  • 添加了依赖,但是没有配置数据库信息

分页

        <!--分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>

在不改变原有sql语句编码的情况下,在执行之前,先查询了总条数,然后在sql语句之后,追加了limit

拦截了数据库的请求,做了修改

    @Overridepublic PageInfo<WebUserInfo> listPage(Integer pageSize, Integer pageNum) {//开启分页PageHelper.startPage(pageNum,pageSize);//查询全部List<WebUserInfo> list = webUserInfoDao.selectList();PageInfo<WebUserInfo> pageInfo = new PageInfo<>(list);return pageInfo;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498137.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能故障诊断和寿命预测期刊推荐

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

Eclipse中引入NS3项目

参考资料&#xff1a; 博主&#xff1a;深度不睡觉 NS3的3.36版本将Eclipse作IDE_ns3使用eclipse-CSDN博客 从1.2安装eclipse开始 其中参考教程中省略的几点&#xff1a; 1.下载解压tar包 mkdir /Tools/Eclipse/EclipseTool # 新建目录 tar -zxvf /path/to/eclipse-cpp-20…

DAY178内网渗透之内网对抗:横向移动篇入口差异切换上线IPC管道ATSC任务Impacket套件UI插件

1.内网横向移动 1、横向移动篇-入口点分析-域内域外打点 2、横向移动篇-IPC利用-连接通讯&计划任务, 3、横向移动篇-IPC利用-命令模式&工具套件 1.1 横向移动入口知识点 收集到域内用户和凭据后&#xff0c;为后续利用各种协议密码喷射通讯上线提供条件&#xff0c;…

【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】

系列文章目录 文章目录 前言一、概述1.1 Lua堆栈 二、栈操作2.1 基本的栈操作2.2 入栈操作函数2.3 出栈操作函数2.4 既入栈又出栈的操作函数2.5 栈检查与类型转换函数2.5 获取表数据 三、实例演示总结 前言 Lua是一种轻量级的、高性能的脚本语言&#xff0c;经常被用于游戏开发…

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例

本文介绍了7个Python爬虫小案例&#xff0c;包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息&#xff0c;帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等&#xff01;【…

VITUREMEIG | AR眼镜 算力增程

根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示&#xff0c;美国市场AR/VR总出货量增长10.3%。其中&#xff0c;成立于2021年的VITURE增长速度令人惊艳&#xff0c;同比暴涨452.6%&#xff0c;成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…

算法 class 004(选择,冒泡,插入)

选择排序&#xff1a; 刚进入 j 循环的样子 j 跳出循环后&#xff0c;b 指向最小值的坐标 然后交换 i 和 b 位置的 值 随后 i , b i , i j1; 开始新一轮的排序&#xff0c; void SelectAQort(int* arr,int size)//选择排序 {for (int i 0; i < size-1; i){ //i 的位置就是…

【Trick】获取kaggle账号的token和api(用于数据集下载)

0&#xff1a;操作背景 由于未来的科研需要用到Unet&#xff0c;但是运行学长的史山代码无法跑通&#xff0c;自己写了一个Unet并load学长的数据集效果也很差&#xff0c;于是打算从最最基础的开始&#xff0c;上github调用一个Unet并成功在公有数据集上跑一遍实例。 Unet的g…

深入理解MemCache

随着互联网应用的飞速发展&#xff0c;动态Web应用的性能问题逐渐成为开发者关注的焦点。其中&#xff0c;数据库作为系统性能的关键瓶颈&#xff0c;在用户请求量急剧增加的情况下&#xff0c;往往难以快速响应用户需求。为了解决这一问题&#xff0c;缓存技术应运而生。MemCa…

移动 APP 设计规范参考

一、界面设计规范 布局原则&#xff1a; 内容优先&#xff1a;以内容为核心进行布局&#xff0c;突出用户需要的信息&#xff0c;简化页面导航&#xff0c;提升屏幕空间利用率.一致性&#xff1a;保持界面元素风格一致&#xff0c;包括颜色、字体、图标等&#xff0c;使用户在…

redis数据结构设计

一. 数据结构简介 要搞清楚redis数据结构&#xff0c;首先需要知道和redis数据相关的三层结构&#xff1a; 五种数据类型 String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Hash&#xff08;哈希&#xff09;、Set&#xff08;集合&#xff09;和 Sor…

使用npm包的工程如何引入mapboxgl-enhance/maplibre-gl-enhance扩展包

作者&#xff1a;刘大 前言 在使用iClient for MapboxGL/MapLibreGL项目开发中&#xff0c;往往会对接非EPSG:3857坐标系的地图&#xff0c;由于默认不支持&#xff0c;因此需引入mapboxgl-enhance/maplibre-gl-enhance扩展包。 在使用Vue等其他框架&#xff0c;通过npm包下载…

021-spring-springmvc

比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是&#xff1a; org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc.method.annotation.Requ…

使用Locust对MySQL进行负载测试

1.安装环境 pip install locust mysql-connector-python 2.设置测试环境 打开MySQL服务 打开Navicat新建查询&#xff0c;输入SQL语句 3.编写locust脚本 load_mysql.py # codingutf-8 from locust import User, TaskSet, task, between import mysql.connector import ran…

Java [后端] 开发日常记录(1)

目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下&#xff1a; 1、常用的注解 若返回的字段中有NUll&#xff0c;则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…

你有哪些Deep Learning(RNN、CNN)调参的经验?

在深度学习的实践中&#xff0c;调参是一项既艺术又科学的工作。它不仅需要理论知识的支撑&#xff0c;还需要大量的实践经验。以下是一些在RNN和CNN模型调参中积累的经验&#xff0c;希望对正在这个领域摸索的朋友们有所帮助。 1. 从成熟的开源项目开始 对于初学者来说&…

公司招产品代理,合作合同协议书怎么写?

如果你的公司招产品代理时候&#xff0c;由于合同协议不标准&#xff0c;导致客户不信任&#xff0c;或者出现过法律纠纷。这份合同协议书&#xff0c;一定能帮你解决这些问题。 标准的模版&#xff0c;各位企业老板可以直接复制套用&#xff01; 甲方&#xff08;委托方 / 产…

wxWidgets 3.2.5发布 —— 发布于2024年5月13日

稳定版3.2系列的最新版本现已在GitHub上发布&#xff0c;你可以从那里下载包含库源代码和文档的存档文件&#xff0c;以及为选定的Windows编译器&#xff08;如Microsoft Visual C、MinGW-w64和TDM-GCC&#xff09;提供的二进制文件。你还可以在线阅读此版本的更新文档&#xf…

【Ubuntu】Ubuntu server 18.04 搭建Slurm并行计算环境(包含NFS)

Ubuntu server 18.04 搭建Slurm并行计算环境&#xff08;包含NFS&#xff09; 一、Munge 认证模块 1.1、安装 munge 主节点和子节点都安装munge #安装 sudo apt update && sudo apt install munge libmunge-dev#设置开机启动 sudo systemctl enable munge sudo syste…

用css实现瀑布流布局

上效果 知识理解 column-count: 4; column-gap: 15px;实现固定四行瀑布流布局 columns: 200px auto;column-gap: 15px;由浏览器根据容器的宽度自动调整&#xff0c;尽可能一行多个200px宽度的列数 <!DOCTYPE html> <html lang"en"><head><me…