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

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录

【SpringBoot日志】

什么是日志,日志的作用

关于日志的基本信息,又有哪些呢?

关于日志的级别

Springboot内置SLF4J【门面模式】 和 logback【日志框架】  

 在配置文件中可以设置日志级别【以.yml为例】

SpringBoot 持久化的保存日志

更简单的书写博客流程【添加lombok,使用@Slf4j注解,自动生成log日志对象,可以直接使用】

【SpringMVC】

创建SpringMVC项目

 SpringMVC应用流程

第一步获取连接的五种基本方式

第二步获取参数

获取单个参数、多个参数、对象 

consumes、produces、@RequestBody

 @RequestParam后端参数重命名   获取?后的参数

获取路径里的参数PathVariable   获取?前的参数

上传文件@ @RequestPart

 获取Cookie/header/Session

第三步返回响应

 返回静态页面【注意在路径中的"/"表示从根目录找页面,不加即在本文件查找文件】

 如果不返回静态页面,而是返回数据(无论是Json还是其他数据,springboot会帮我们适配)

返回跳转的地址【请求转发,请求重定向】

【Idea设置热部署全流程】

第一步 在SpringBoot项目中添加devtools

第二步打开settings打开自动编译的选项【注意有两个settings一个是本项目,一个是其他新项目】

第三步 在本项目settings中勾选


【SpringBoot日志】

什么是日志,日志的作用

在项目启动运行时,会发现在响应框里有如下此类信息,这些就是日志。

日志的作用:

        1.记录错误日志和警告日志(发现和定位问题)

        2.用户日志

        3.系统日志

        4.程序执行日志

关于日志的基本信息,又有哪些呢?

关于日志的级别

⽇志的级别分为:
低   trace:微量,少许的意思,级别最低;
 |     debug:需要调试时候的关键信息打印;
 |     info:普通的打印信息(默认⽇志级别);
 |     warn:警告,不影响使⽤,但需要注意的问题;
 |     error:错误信息,级别较⾼的错误⽇志信息;
高   fatal:致命的,因为代码异常导致程序退出执⾏的事件。【一般为系统设置】

Springboot内置SLF4J【门面模式】 和 logback【日志框架】  

对于日志的框架大致有三种,log4j1/2、JUL、logback。对于SpringBoot来说,通过SLF4J的简单的日志门面,SLF4J帮助完成后续的 logback 日志书写

 在配置文件中可以设置日志级别【以.yml为例】

logging:level:root: errorcom:example:demo:Controller: trace;

在不同级下可以设置不同的日志级别,上述代码在 root 级别上设置了 error 级别,在 Controller 上设置了 trace 级别。当只有日志的级别高于所设定的级别,在响应框内才会打印。【当root设置为error 重启项目,会发现没有日志的打印,因为第一次启动发现的日志都是低于 error】

SpringBoot 持久化的保存日志

 1.设置日志的保存路径

2.设置日志保存名称

编写日志

package com.example.demo.Controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-10-08* Time: 16:43*/
@Controller
@ResponseBody
public class TestController {@RequestMapping("/mapping")public String sayHi(){return("serverPort->"+serverPort+"  spring.datasource.url"+url);}@Value("${server.port}")private int serverPort;@Value("${spring.datasource.url}")private String url;//1.获取日志对象private static Logger logger = LoggerFactory.getLogger(TestController.class);@RequestMapping("/print")public String sayHello(){//2.使用日志对象打印日志logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "Hello,"+url;}}

更简单的书写博客流程【添加lombok,使用@Slf4j注解,自动生成log日志对象,可以直接使用】

【SpringMVC】

经常听到别人做项目要用到SSM,什么是SSM?

SSM-> Spring + Spring MVC +MyBatis[老说法] 

SSM-> SpringBoot + SpringWeb(springMVC)+MyBatis[新说法]

        其中一般项目中不单独使用Spring框架,一般情况下是直接搭建SpringBoot框架原因很简单,注解写起来更快更方便。新版和旧版都有的部分就是SpringMVC和MyBatis,SpringMVC就是可以通过浏览器建立数据的存取工作,相当于JavaEE初阶所学的Servlet,我们会发现在新版中多了一个SpringWeb框架,这个框架是方便于搭建SpringMVC的过程,在老说法中直接在项目中搭建SpringMVC,直接搭建浏览器存取工作是十分繁琐的,所有诞生了SpringWeb框架帮助我们更好的实现浏览器请求响应等工作。MyBatis方便于数据库存取工作,在之后的博客也会详细提到。

简单总结一下什么是SpringMVC?

SpringMVC=接受浏览器的请求,获取浏览器的参数,给浏览器响应,即建立与浏览器的连接。

创建SpringMVC项目

有时候项目不能很好的识别出创建的是一个maven项目,所以需要手动添加maven 

 SpringMVC应用流程

第一步获取连接的五种基本方式

package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-10-23* Time: 14:04*/
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {@RequestMapping("/say")public String sayHi(){return "Hi SpringMVC RequestMapping Get/Post";}@RequestMapping(value = "/say2",method = RequestMethod.POST)public String sayHi2(){return "Hi SpringMVC RequestMapping Get";}@PostMapping("/say3")public String sayHi3(){return "Hi StringMVC PostMapping Post";}@RequestMapping(value = "/say4",method = RequestMethod.GET)public String sayHi4(){return "Hi SpringMVC RequestMapping Get";}@GetMapping("/say5")public String sayHi5(){return "Hi StingMVC GET";}
}

在浏览器输入say模拟实现get请求

 因为浏览器只能发送get请求所以我们用postman模拟发送post请求  

第二步获取参数

获取单个参数、多个参数、对象 
package com.example.demo.controller;import com.example.demo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-10-23* Time: 14:04*/
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {@RequestMapping("/getName") //获取一个参数public String printName(String name){return "printName:"+name;}@RequestMapping("/getNameAge") //获取多个参数public String printNameAge(String name,String age){return "printNameAge:"+name+" "+age;}@RequestMapping("/getUser") //获取一个对象public String getUser(User user){return user.toString();}
}
package com.example.demo.entity;import lombok.Data;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-10-23* Time: 16:26*/
@Data
public class User {private int age;private String name;
}

需要注意的是要在url里的变量名要与程序书写的变量名保持一致

consumes、produces、@RequestBody

 consumes用来指定只能接收什么样子的对象,produces用来指定返回什么格式的对象例如Json格式

package com.example.demo.controller;import com.example.demo.entity.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** Created with IntelliJ IDEA.* Description:* User: 97175* Date: 2023-10-23* Time: 14:04*/
@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {//consumes用来指定只能接收什么样子的对象,produces用来指定返回什么格式的对象例如Json格式@RequestMapping(value = "/getUser2",consumes = "application/json",produces = "application/json")public User getUser2( @RequestBody User user){//用于接收json格式的对象需要添加@RequestBody注解return user;}}

 @RequestParam后端参数重命名   获取?后的参数
@RequestMapping("/getNameAge") //获取多个参数public String printNameAge(@RequestParam("username")String name,String age){return "printNameAge:"+name+" "+age;}

获取路径里的参数PathVariable   获取?前的参数
@RequestMapping("/test/{name}/{password}")public String test_pathVariable(@PathVariable("name") String name,@PathVariable("password")String password){return "name:"+name+"password:"+password;}

 

上传文件@ @RequestPart
@RequestMapping("/myupload")public Object upload(@RequestPart("myimg")MultipartFile file) throws IOException {File saveFile = new File("A:\\home\\myimg.jpg");try{file.transferTo(saveFile);return true;} catch (IOException e) {e.printStackTrace();}return false;}

 

当我们上传多个文件的时候会发现后一个文件会覆盖前一个文件,究其原因就是文件名相同都是myimg.jpg,所以添加如下代码使上传文件名各不相同。【原理UUID通用唯一识别码 参考【精选】UUID详细介绍-CSDN博客】

String fileName = UUID.randomUUID()+ // 文件名file.getOriginalFilename().substring( // 文件后缀file.getOriginalFilename().lastIndexOf("."));File saveFile = new File("A:\\home\\"+fileName);

 重新用postman来发送存储文件的请求,再次打开对应文件夹

 获取Cookie/header/Session

简洁的获取Cookie

@RequestMapping("/getck")public Object getCk(@CookieValue(value = "java",required = false)String java){return java;}

简单的获取header

    @RequestMapping("/gethd")public Object getHd(@RequestHeader(value = "User-Agent",required = false)String ua){return ua;}

简单的获取Session

private static final String key = "key1";@RequestMapping("/setsession")public void setSession(HttpServletRequest request){HttpSession session = request.getSession();session.setAttribute(key,"value");}@RequestMapping("/getsession")public Object getSession(@SessionAttribute(key)String name){return "session->"+name;}

第三步返回响应

 返回静态页面【注意在路径中的"/"表示从根目录找页面,不加即在本文件查找文件】
@Controller
@RequestMapping("/test")
public class TestController {@RequestMapping("/index")public Object getIndex(){return "/index.html";}
}
 如果不返回静态页面,而是返回数据(无论是Json还是其他数据,springboot会帮我们适配)

加上@ResponseBody

@Controller //五大类注解 将USerController注入SpringBoot项目
@ResponseBody //返回非页面
public class UserController {
返回跳转的地址【请求转发,请求重定向】

返回请求转发 forward:/

@RequestMapping("fw")public String fw(){ //返回请求转发return "forward:/index.html";}

返回请求转发 redirect:/

@RequestMapping("/rd")public String rd(){ //返回请求重定向return "redirect:/index.html";}

【Idea设置热部署全流程】

第一步 在SpringBoot项目中添加devtools

第二步打开settings打开自动编译的选项【注意有两个settings一个是本项目,一个是其他新项目】

第三步 在本项目settings中勾选

第四步 开启debug就可以了

 

相关文章:

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录 【SpringBoot日志】 什么是日志,日志的作用 关于日志的基本信息,又有哪些呢? 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…...

向日葵远程控制中的键盘异常问题

本文记录的是ubuntu 20.04 上, 向日葵的最高版本目前只有V 11.0.1.44968(2022.02) 我的被控制和 控制端都是上述环境; 起因,由于我昨天在控制端按下了 win/ 或者是其他的组合键 (具体哪个键盘确实没有注…...

【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕

1.目标 在做饭、锻炼等无法腾出双手的场景中,想刷刷抖音 刷抖音的时候有太多的广告 如何解决痛点 抖音自动播放下一个视频 iOS系统高版本无法 越狱 安装插件 2.操作环境 MAC一台,安装 Xcode iPhone一台,16 系统以上最佳 3.流程 下载最…...

聊聊“JVM 调优JVM 性能优化”是怎么个事?

所谓“调优”就是一个诊断和处理手段,最终的目标是让系统的处理能力,也就是“性能”达到最优化。 计算机系统中,性能相关的资源主要分为这几类: CPU:CPU 是系统最关键的计算资源,在单位时间内有限&#xf…...

再获Gartner认可!持安科技获评ZTNA领域代表供应商

近日,全球权威市场研究与咨询机构Gartner发布了《Hype Cycle for Security in China, 2023(2023中国安全技术成熟度曲线)》报告,对2023年的20个中国安全技术领域的现状与发展趋势进行了详细的分析与解读。 其中,持安科…...

微服务-Feign

文章目录 Feign介绍Feign的基本使用自定义Feign的配置Feign性能优化Feign最佳实践 Feign介绍 RestTemplate远程调用存在的问题:代码可读性差,java代码中夹杂url;参数复杂很难维护 String url "http://userservice/user/" order.g…...

jsp获取数据 jsp直接获取后端数据 获取input选中的值 单选 没 checked属性

let str0${showList}; let str1${showList}; 然后可以通过JSON.parse() 转 获取input选中的值 //goodsType 按类别 goods按货品var oneType $("input[ namecriteria1 ] ").val();//count按数量 totalprice按费用var twoType $("input[ namecriteria2 ] &q…...

React 中 keys 的作用是什么?

目录 前言:React 中的 Keys 的重要性 为什么 Keys 重要? 详解:key 属性的基本概念 用法:key 属性的示例 解析:key 属性的优势和局限性 优势: 局限性: key 属性的最佳实践 稳定的唯一标…...

代码随想录 | Day46

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 今日学习目标一、算法题1.完全背包问题2.零钱兑换 II3.组合总和 Ⅳ 学习及参考书籍 今日学习目标 完全背包问题 零钱兑换 II(518) 组合总和…...

word行内插入mathtype 公式后行距变大解决办法

现象 word行内插入mathtype 公式后行距变大 解决方法 选中要进行操作的那些行,依次单击菜单命令“格式→段落”,打开“段落”对话框;单击“缩进和间距”选项卡,将间距的“段前”和“段后”都调整为“0行”;将“如果…...

直播预告 | YashanDB 2023年度发布会正式定档11月2日,邀您共同见证国产数据库发展实践!

11月2日,YashanDB 2023年度发布会将于云端直播开启,发布会以 「惟实励新」 为主题,邀请企业用户、合作伙伴、广大开发者共同见证全新产品与解决方案。届时发布会将在墨天轮社区同步进行,欢迎大家报名! 惟实求真。Yasha…...

一文读懂WebClient和RestTemplate的差异

自 Spring 5 以来,WebClient已成为Spring WebFlux的一部分,并且是发出 HTTP 请求的首选方式。它是经典RestTemplate的首选替代方案,后者自 Spring 5.0 以来一直处于维护模式。 本文将讨论 Spring WebClient和RestTemplate类之间的主要区别。…...

如何使用SpringBoot处理全局异常

如何使用SpringBoot处理全局异常 使用ControllerAdvice 和 ExceptionHandler处理全局异常 参考: ControllerAdvice ResponseBody Slf4j public class ExceptionHandler {ResponseStatus(HttpStatus.OK)org.springframework.web.bind.annotation.ExceptionHandler…...

【2023CANN训练营第二季】——通过一份入门级算子开发代码了解Ascend C算子开发流程

本次博客讲解的代码是Gitee代码仓的Ascend C加法算子开发代码,代码地址为: quick-start 打开Add文件,可以看到文件结构如下: 其中add_custom.cpp是算子开发的核心文件,包括了核函数的实现,展示了如何在Asc…...

建模仿真软件 Comsol Multiphysics mac中文版软件介绍

COMSOL Multiphysics mac是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件,拥有、网格划分、研究和优化、求解器、可视化和后处理、仿真 App等相关功能,轻松实现各个环节的流畅进行,它能够解释耦合或多物理现象。 附加产品扩展了…...

深入理解强化学习——强化学习的历史:近代强化学习的发展

分类目录:《深入理解强化学习》总目录 在《深入理解强化学习——强化学习的历史》前面的文章中我们讨论了最优控制和试错学习学习的思想,接下来,我们将讨论一些在20世纪60年代和70年代,在试错学习计算和理论研究被相对忽视的时候&…...

移动端ViT新利器!苹果提出稀疏专家混合模型Mobile V-MoEs

文章链接:https://arxiv.org/abs/2309.04354 最近,专家混合模型MoE受到了学术界和工业界的广泛关注,其能够对任意输入来激活模型参数中的一小部分来将模型大小与推理效率分离,从而实现模型的轻量化设计。目前MoE已经在自然语言处理…...

【linux系统】服务器安装Pycharm

文章目录 安装pycharm步骤1. 进入pycharm官网2. 上传到服务器3. 安装过程 摘要:pycharm是Python语言的图形化开发工具。因为如果在Linux环境下的Python shell 中直接进行编程,其无法保存与修改,在大型项目当中这是很不方便的,而py…...

便利连锁:如何增加收益?教你一招轻松搞定!

自动售货机,作为零售行业的一项颠覆性技术,正逐渐改变着我们的购物方式和商业格局。这一创新技术不仅重新定义了零售业务模式,还为企业提供了更多的机会来满足不断演变的消费者需求。 客户案例 便利连锁店 成都某便利连锁店面临一系列挑战&am…...

STM32-程序占用内存大小计算

STM32中程序占用内存容量 Keil MDK下Code, RO-data,RW-data,ZI-data这几个段: Code存储程序代码。 RO-data存储const常量和指令。 RW-data存储初始化值不为0的全局变量。 ZI-data存储未初始化的全局变量或初始化值为0的全局变量。 占用的FlashCode RO Data RW Data; 运行消…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...