SpringBoot学习

一、SpringBoot介绍

(一)SpringBoot简介

        Spring Boot 是由 Pivotal 团队提供的一个用于简化 Spring 应用初始搭建以及开发过程的框架。它基于 Spring 框架,旨在通过减少配置和简化开发流程来加速应用的开发和部署。Spring Boot 提供了嵌入式的 Tomcat、Jetty 或 Undertow 服务器,使得应用可以作为一个独立的 JAR 文件运行,无需外部部署。

(二)SpringBoot 的优点

  • 简化配置:
    • 自动配置:Spring Boot 会根据类路径中的依赖自动配置 Spring 应用,减少了手动配置的需要。
    • Starter 依赖:通过引入 spring-boot-starter-* 依赖,可以快速集成各种功能,如 Web、JPA、Security 等。
  • 快速启动:
    • 嵌入式服务器:支持嵌入式 Tomcat、Jetty 或 Undertow,使得应用可以作为一个独立的 JAR 文件运行,无需外部部署。
    • 减少启动时间:由于简化了配置和依赖管理,应用的启动时间大大缩短。
  • 生产就绪:
    • 监控和管理:提供了 Actuator 模块,可以方便地监控和管理应用。
    • 健康检查:内置健康检查功能,便于监控应用状态。
  • 社区支持:
    • 活跃社区:Spring Boot 拥有庞大的用户社区和丰富的文档资源,便于开发者解决问题和获取帮助。
    • 广泛使用:许多大型企业和开源项目都在使用 Spring Boot,证明了其稳定性和可靠性。
  • 微服务支持:
    • Spring Cloud:与 Spring Cloud 结合使用,可以轻松构建微服务架构。
    • 服务发现、负载均衡:提供了服务发现(Eureka)、配置中心(Config Server)等功能,支持微服务的开发和部署。

(三)SpringBoot 的缺点

  • 学习曲线:
    • 复杂性:虽然 Spring Boot 简化了许多配置,但对于初学者来说,理解其自动配置机制和依赖管理可能需要一定时间。
    • 依赖管理:Spring Boot 的 Starter 依赖可能会引入不必要的库,导致应用体积增大。
  • 过度封装:
    • 黑盒操作:自动配置机制可能会隐藏一些底层实现细节,使得开发者难以理解某些配置是如何生效的。
    • 调试困难:当遇到问题时,由于自动配置的复杂性,调试过程可能会变得复杂。
  • 性能开销:
    • 嵌入式服务器:虽然嵌入式服务器简化了部署,但在高并发场景下,性能可能不如独立部署的服务器。
    • 内存占用:Spring Boot 应用通常会占用较多的内存,尤其是在使用大量依赖的情况下。
  • 版本兼容性:
    • 依赖冲突:由于 Spring Boot 使用了固定的依赖版本,可能会导致与其他库的版本冲突。
    • 升级困难:升级 Spring Boot 版本时,可能会遇到兼容性问题,需要仔细测试和调整配置。

(四)SpringBoot与微服务的区别

SpringBoot和微服务架构是两个不同的概念,但它们可以很好地结合使用。

  • Spring Boot:
    • 定义:SpringBoot是一个用于简化Spring应用开发的框架。
    • 功能:提供自动配置、嵌入式服务器、生产就绪功能等。
    • 适用场景:适用于各种规模的应用开发,包括单体应用和微服务。
  • 微服务架构:
    • 定义:微服务架构是一种设计风格,将应用拆分为一组小型、独立的服务,每个服务运行在自己的进程中,并通过轻量级的通信机制(如 HTTP)进行交互。
    • 功能:强调服务的独立部署、独立扩展和独立维护。
    • 适用场景:适用于大型、复杂的系统,需要高可用性和可扩展性的场景。
  • 结合使用SpringBoot和微服务
    • SpringBoot可以作为构建微服务的基础框架,提供简化开发和部署的功能。
    • SpringCloud提供了微服务相关的组件,如服务发现(Eureka)、配置中心(Config Server)、负载均衡(Ribbon)等,与SpringBoot结合使用可以构建完整的微服务架构。  

二、创建一个SpringBoot项目

三、@ConfigurationProperties

        @ConfigurationProperties是SpringBoot提供的一个注解,用于将配置文件中的属性绑定到 Java 对象中。这使得配置管理更加方便和类型安全。 

// DogProperties类如果已经添加到容器中,则不需要再添加@EnableConfigurationProperties注解
// @EnableConfigurationProperties(DogProperties.class)
@SpringBootApplication
public class BootdemoApplication {public static void main(String[] args) {SpringApplication.run(BootdemoApplication.class, args);}
}
@ConfigurationProperties(prefix = "dog")
@Component
@Data
public class DogProperties {private String name;private Integer age;private String color;
}

application.properties: 

# 应用服务 WEB 访问端口
server.port=8080dog.name=gigi
dog.age=3
dog.color=black

测试类: 

@SpringBootTest
class BootdemoApplicationTests {@AutowiredDogProperties dogProperties;@Testvoid contextLoads() {System.out.println(dogProperties);}
}

运行结果:

DogProperties(name=gigi, age=3, color=black)

四、properties与yml配置文件

        在properties文件中写中文会乱码,推荐使用yml文件,properties的优先级比yml高,出现相同配置,优先使用properties文件中的配置。

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private Integer age;private String birthDay;private Boolean like;private Child child;private List<Dog> dogs;private Map<String,Cat> cats;
}@Data
class Child{private String name;private Integer age;private String birthDay;private List<String> text;
}@Data
class Cat{private String name;private Integer age;
}@Data
class Dog{private String name;private Integer age;
}

application.yml文件: 

spring:application:name: bootdemodog:name: hahaage: 10color: whiteperson:name: 张三age: 10birthDay: 2019-01-01like: truechild:name: 李四age: 12birthDay: 2020-01-01text: # 或者写在[]里面  ["aa","bb","cc"]- hello- worlddogs:- name: dog1age: 1- name: dog2age: 3- { name: dog3, age: 4 }cats:- bluecat:name: 蓝猫age: 1- whitecat:name: 白猫age: 2- blackcat: { name: 黑猫, age: 3 }

五、banner的配置

在resource文件夹下,新建banner.txt 或者 banner.jpg

https://www.bootschool.net/ascii

六、启动Spring应用的其他方式

@SpringBootApplication
public class BootdemoApplication {public static void main(String[] args) {// 应用启动SpringApplication.run(BootdemoApplication.class, args);/*** 下面两种启动方式可以在启动前配置一些参数* */// 链式调用/*SpringApplicationBuilder builder = new SpringApplicationBuilder();builder.sources(BootdemoApplication.class).bannerMode(Banner.Mode.OFF).environment(null).run(args);*//* SpringApplication application = new SpringApplication(BootdemoApplication.class);application.setBannerMode(Banner.Mode.OFF);
//        application.setListeners();application.setEnvironment(null);application.run(args);*/}
}

七、日志系统

(一)日志格式

规定:项目开发不要写System.out.println();用日志记录信息

@Slf4j
@SpringBootTest
public class LogTest {@Testpublic void test() {System.out.println("====================");log.error("错误日志");log.warn("警告日志");log.trace("追踪日志");log.debug("调试日志");log.info("信息日志");}
}2024-12-27 20:57:20.930 ERROR 15588 --- [           main] com.javatest.springboot01Demo.LogTest    : 错误日志
2024-12-27 20:57:20.931  WARN 15588 --- [           main] com.javatest.springboot01Demo.LogTest    : 警告日志
2024-12-27 20:57:20.931  INFO 15588 --- [           main] com.javatest.springboot01Demo.LogTest    : 信息日志

(二)日志分组 

# 调整日志级别 root表示根级别,默认为info,可以不写
# 如果哪个包、哪个类不说明日志级别,则默认为root的级别
# root后可选参数:trace, debug, info, warn, error, fatal, off
logging.level.root=debug
# 指定包打印日志级别
logging.level.com.javatest.boot=info
# 设置日志组
logging.group.biz=com.javatest.boot.service,com.javatest.boot.dao
# 整组批量设置日志级别
logging.level.biz=debug

(三)日志输出文件输出

 

# 指定日志输出文件
logging.file.name=springboot-01-demo/boot.log
# 指定日志输出路径
#logging.file.path=D://logs

(四)文件归档与滚动切割

(五)自定义配置 

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

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

相关文章

FIR数字滤波器设计——窗函数设计法——滤波器的时域截断

与IIR数字滤波器的设计类似&#xff0c;设计FIR数字滤波器也需要事先给出理想滤波器频率响应 H ideal ( e j ω ) H_{\text{ideal}}(e^{j\omega}) Hideal​(ejω)&#xff0c;用实际的频率响应 H ( e j ω ) H(e^{j\omega}) H(ejω)去逼近 H ideal ( e j ω ) H_{\text{ideal}}…

FreeType矢量字符库的介绍、交叉编译以及安装

FreeType矢量字符库的介绍 FreeType 是一个开源的跨平台字体引擎库&#xff0c;广泛用于 Linux 嵌入式系统中实现字符显示的功能。它提供了高效的 TrueType、OpenType 和其他字体格式的解析和渲染功能&#xff0c;在嵌入式开发中尤其适合用来绘制矢量字体和位图字体。 FreeTy…

vue css box-shadow transition实现类似游戏中的模糊圈游走的感觉

先看效果&#xff1a; 代码如下&#xff1a; <template><div style"height: 800px"></div><divclass"rainbow-position"ref"host"><divv-for"config in colorStyles"class"one-shadow":style&q…

欧拉计划启航篇(一)

目录 1.什么是欧拉计划 2.简单介绍 3.访问不上去怎么办 4.第一题的代码编写 5.代码的优化 1.什么是欧拉计划 欧拉计划是和我们的数学知识相关的一个网站&#xff0c;但是这个网站上面的相关的问题需要我们去使用编程的知识去进行解决&#xff0c;因此这个适合对于想要提升…

【Compose multiplatform教程12】【组件】Box组件

查看全部组件文章浏览阅读493次&#xff0c;点赞17次&#xff0c;收藏11次。alignment。https://blog.csdn.net/b275518834/article/details/144751353 Box 功能说明&#xff1a;简单的布局组件&#xff0c;可容纳其他组件&#xff0c;并依据alignment属性精确指定内部组件的对…

无人零售 4G 工业无线路由器赋能自助贩卖机高效运营

工业4G路由器为运营商赋予 “千里眼”&#xff0c;实现对贩卖机销售、库存、设备状态的远程精准监控&#xff0c;便于及时补货与维护&#xff1b;凭借强大的数据实时传输&#xff0c;助力深度洞察销售趋势、优化库存、挖掘商机&#xff1b;还能远程升级、保障交易安全、快速处理…

springboot 配置跨域访问

什么是 CORS&#xff1f; CORS&#xff0c;全称是“跨源资源共享”&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;是一种Web应用程序的安全机制&#xff0c;用于控制不同源的资源之间的交互。 在Web应用程序中&#xff0c;CORS定义了一种机制&#xff0…

Ubuntu离线安装Docker容器

前言 使用安装的工具snap安装在沙箱中&#xff0c;并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…

【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData

组件继承于IBufferElementData&#xff0c;可以让一个实体拥有多个相同的组件。 using Unity.Entities;public struct MyBuffComponentData : IBufferElementData {public int num; }using System.Collections; using System.Collections.Generic; using UnityEngine; using U…

一种寻路的应用

应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节&#xff1a; 全国的长途车车站的数据的更新&#xff1a; …

15、【OS】【Nuttx】OS裁剪,运行指定程序,周期打印当前任务

背景 接之前wiki【Nsh中运行第一个程序】https://blog.csdn.net/nobigdeal00/article/details/144728771 OS还是比较庞大&#xff0c;且上面搭载了Nsh&#xff08;Nuttx Shell&#xff09;&#xff0c;需要接入串口才能正常工作&#xff0c;一般调试的时候用&#xff0c;非调试…

学习 Python 编程的规则与风格指南

文章目录 1. Python 编程规则1.1 Python 的哲学&#xff1a;The Zen of Python1.2 遵守 PEP 81.3 Python 是大小写敏感的1.4 使用 Pythonic 风格 2. Python 编程风格2.1 命名风格2.2 注释风格2.3 文档字符串&#xff08;Docstring&#xff09;2.4 空格使用2.5 文件和代码组织 3…

Seata AT 模式两阶段过程原理解析【seata AT模式如何做到对业务的无侵入】

在分布式事务中&#xff0c;Seata 的 AT 模式&#xff08;Automatic Transaction&#xff09;是一种基于两阶段提交协议的事务模式。它通过自动生成数据快照&#xff08;before image 和 after image&#xff09;&#xff0c;实现了对分布式事务的高效管理。本文将详细解析 Sea…

中关村科金外呼机器人智能沟通破解营销难题

当今&#xff0c;传统的营销方式在效率、成本控制、客户管理等方面逐渐显现出局限性&#xff0c;难以满足现代企业的需求。如何提升营销效率、降低运营成本、有效管理客户会员&#xff0c;成为企业的难题。中关村科金外呼机器人通过智能化沟通技术&#xff0c;为企业提供了一站…

旅游景点票价预测02

5.数据预处理 经过4的数据分析环节&#xff0c;我们得出了一些和目标特征‘price’关联度比较高的特征&#xff0c;现在将这些特征列进行提取 df.head(5)# 筛选对应的数据列 rs_df df[[price,comment,sight_comment_score,level,city,address]] # 判断是否有缺失值 rs_df.isnu…

“事务认证平台”:个人日常事务管理系统的诚信体系建设

3.1系统体系结构 系统的体系结构非常重要&#xff0c;往往决定了系统的质量和生命周期。针对不同的系统可以采用不同的系统体系结构。本系统为个人日常事务管理系统&#xff0c;属于开放式的平台&#xff0c;所以在体系结构中采用B/s。B/s结构抛弃了固定客户端要求&#xff0c;…

单片机与MQTT协议

MQTT 协议简述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布 / 订阅&#xff08;publish/subscribe&#xff09;模式的 “轻量级” 通讯协议&#xff0c;该协议构建于 TCP/IP 协议上&#xf…

小程序基础 —— 07 创建小程序项目

创建小程序项目 打开微信开发者工具&#xff0c;左侧选择小程序&#xff0c;点击 号即可新建项目&#xff1a; 在弹出的新页面&#xff0c;填写项目信息&#xff08;后端服务选择不使用云服务&#xff0c;开发模式为小程序&#xff0c;模板选择为不使用模板&#xff09;&…

【js】记录预览pdf文件

接口调用拿到pdf的文件流&#xff0c;用blob处理这个文件流拿到url&#xff0c;使用window.open跳转新的窗口进行预览 api({dataType: blob, }).then(res >{if(res.code 0){this.previewPDF(res,application/pdf;charsetutf-8,pdf文件名)} })previewPDF (res, type, fname…

《机器学习》——利用OpenCV库中的KNN算法进行图像识别

文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择&#xff1a;K值代表选择与新测试样本距离最近的前K个训练样本数&#xff0c;通常K是不大于20的整数。K值的选择对算法结果有重要影响&#xff0c…