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

java-spring boot光速入门教程(超详细!!)

目录

一、引言

1.1 初始化配置

1.2 整合第三方框架

1.3 后期维护

1.4 部署工程

1.5 敏捷式开发

二、SpringBoot介绍

spring boot

2.1 搭建一个spring boot工程

2.2 使用idea创建项目

2.3 在线创建姿势

2.4 项目的目录结构

2.5 项目的运行方式

2.6 yml文件格式

2.7 多环境配置

2.8 配置类的使用

2.9 静态资源处理


一、引言


1.1 初始化配置

为了使用SSM框架去开发,准备SSM框架的模板配置。

1.2 整合第三方框架

为了Spring整合第三方框架,单独的去编写xml文件。

1.3 后期维护

后期SSM项目后期xml文件特别多,维护xml文件的成本是很高的

1.4 部署工程

SSM工程部署也是很麻烦,依赖第三方的容器

1.5 敏捷式开发

基于Java的SSM开发方式是很笨重,而现在的python,php,NodeJS的敏捷式开发已经盖过Java一头

二、SpringBoot介绍


SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-jpa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。

SpringBoot就是一个工具集。

SpringBoot特点:

  • SpringBoot项目不需要模板化的配置。

  • SpringBoot中整合第三方框架时,只需要导入相应的starter依赖包,就自动整合了。

  • SpringBoot默认只有一个.properties的配置文件,不推荐使用xml,后期会采用.java的文件去编写配置信息。

  • SpringBoot工程在部署时,采用的是jar包的方式,内部自动依赖Tomcat容器,提供了多环境的配置。

  • 后期要学习的微服务框架SpringCloud需要建立在SpringBoot的基础上。

 

三、spring boot

使用的版本是: 2.6.8, 暂不要使用spring boot3.x版本.

官方文档: Spring Boot

spring boot的整个文档:

  • Spring Boot Reference Documentation

3.1 搭建一个spring boot工程

必须会这种.

  1. 新建一个java se的maven工程.

  2. spring boot的依赖.

<!-- 注意,这个标签是parent, 表示当前的父工程 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.8</version>
</parent>
  1. 引入一个组件, spring boot starter web.

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
  1. 创建一个启动类.

/*** @author 听忆*/
@SpringBootApplication // 表示我是一个启动类.
public class MyApplication {// 通过main启动当前的spring boot工程.public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
  1. 编写一个控制器的方法

原则: 之前怎么写这里还是怎么写,一点变化都没有.

/*** @author 听忆*/
@RestController
public class UserController {@GetMapping("/hello")public String hello(){return "你好啊,spring boot";}
}

3.2 使用idea创建项目

3.3 在线创建姿势

通过start.spring.io或者start.aliyun.com,可以在网页端进行项目的创建,然后下载创建的压缩包解压之后,导入到idea当中即可;

注意事项:

  • 如果start.spring.io无法访问,「在idea当中」, 则可以尝试去修改idea的配置为: start.aliyun.com, 然后按照后续流程进行创建项目.

  • 目前版本号是: 2.6.8

3.4 项目的目录结构

咱们手动创建的项目, 这个结构就是一个标准的javaSE工程,没有配置文件.如果用这种方式,我们会手动去创建这些个目录. –> 之后会使用这种方式.

采用idea内置的方式创建,给我们生成了:

  • resouce

    • static

    • templates

    • applicaton.properties –> 文件名称不能修改.

3.5 项目的运行方式

开发阶段,一般情况我们都使用idea直接运行.

测试/上线 –> 打包

  • 使用maven,必须得安装上打包插件.

 
<!-- 打包插件, 将当前的工程,打包成xxx.jar包。必须得有此插件。 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>
注意事项:

  • 如果你这个报红, 但是咱们如果不打包的话,则直接将它删除掉.打包必须得下载成功.

    • 如果实在下载不了,拷贝一个,放到自己maven本地仓库.

==特别重要的注解:==

@SpringBootApplication就是一个组合注解:
​
-  @SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
-  @EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类,加载META-INF/spring.factories配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。- 好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。- 坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。- 手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
-  @ComponentScan就相当于<context:component-scan basePackage=“包名” />,帮助扫描注解的。

复合注解。

  • 实现包扫描, 自动装配。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited // 四个元注解
------------------------------
@SpringBootConfiguration // sprnig自动装配
@EnableAutoConfiguration // 启动spring 自动装配
// 包扫描配置
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
-------------------------------------------
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

自动装配.
xxxAutoConfiguration, --> 自动装配的类.
xxxProperties --> 在配置文件当中,要覆盖的属性.

以spring mvc为例,查看一下自动装配和我们自定义配置如何做的.

每一个组件都会有: xxxAutoConfiguration, 必须要有的.相当于一个规范.

@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
// 开启配置
@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {

通过观察发现了: 有两个xxxProperties的文件.这个文件就是: 我们可以在配置文件当中: application.properties文件进行属性覆盖的文件.也就是说, 在xxxProperties文件当中,全部都是默认的配置项.如果我们想更改这些个默认的配置,则只需要, 直接通过: 前缀.属性名称=值 进行覆盖即可;

@ConfigurationProperties(prefix = "spring.mvc") // 定义一个, 在application.properties文件当中,进行配置的前缀.
// 通过前缀.属性名称  = 值,覆盖当前这个配置类的相关属性.
public class WebMvcProperties {
}

spring.mvc.view.prefix=/pages/xx # 在配置文件当中,覆盖view.prefix
spring.mvc.view.suffix=.jsp # 在配置文件当中, 覆盖view.suffix 

==xxxAutoConfiguration.java==

==xxxProperties.java==

对于这些类的加载.它是有条件的,当符合装配条件,则spring boot才会去加载.并且进行自动装配.如果不符合条件,则不加载.使用起来更加灵活.

类似于:

ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
@ConditionalOnClass(RedisOperations.class)

3.6 yml文件格式

一般情况下,我们都写: application.yml这种姿势的,但是实际也可以写: application.yaml格式.更推荐: yml文件格式的.

也可以配置一些数据或者集合

# 表示配置一个数组或者集合.注意:
# -空格 值
# tingyi.student
tingyi:student:- 张三- 李四- 王五

集合或者数组的表示方式.

如果同时使用application.properties文件,和application.yml文件,则生效的是 :applicaton.properties文件.

3.7 多环境配置

实际工作当中有三个环境:

  • 开发环境,就是我们程序员自己的开发环境.

  • 测试环境, 测试的同学们,使用的一种环境,可能跟这个开发环境还一样.

  • 生产环境, 对外给用户用的环境.「线上环境」

生产需要, 从开发环境的数据库.要切换到测试环境的数据,怎么来做方便一些.你不能直接修改配置配置. 此时就需要我们在开发阶段就将这个多环境配置好.这样我们打包之后,就可以在运行的时候,方便的切换各种各样的环境;

测试, 修改端口号:

  • 开发环境: 9000

    • application-dev.yml

  • 测试环境: 9001

    • application-test.yml

  • 生产环境: 9002

    • application-prod.yml


  • 加载的配置文件

    • application.yml, 在这个文件当中咱们可以指定一个环境.

多环境配置的写法总结:

  • 配置环境这样写:

    • application-{环境名称}.yml

  • 主配置文件当中对环境进行激活

    spring:profiles:active: 环境名称
在部署工程时,通过 java -jar jar文件 --spring.profiles.active=环境

3.8 配置类的使用

使用:

  • 必须将类标记一注解: @Component, 将这个类对象放到容器当中.

  • 添加配置类注解: @ConfigurationProperties(prfix=’要写在配置文件当中的前缀’)

  • 必须得有getter/setter方法,方可配置.

用途:

  • 在配置文件当中对我们的配置类的属性进行赋值了.也就是配置好了.

  • 那么在其它类当中可以随意使用, 使用的时候,通过注解的姿势来获取配置在配置文件当中的配置类的属性的值;

  • @Value(‘前缀.配置类的属性名称‘)

如果不写配置类的,可以直接在配置文件当中进行字段相关配置也是可以的.

# 没有配置类,我们直接可以这样配置.
tingyi:name: 听忆sex: 男address: 呀呼

tingyi并没有类与之相对应,只是我们手动搞了一个前缀,使用起来感觉跟咱们有配置的方式一毛一样.结果也是一样的.但是这样写的话,并不好.不方便维护,且前缀可以随意的更改的.因为有配置类的方式前缀已经约定好了.不能随意的更改.

用法.一毛一样,没有啥区别;

3.9 静态资源处理

public static class Resources {
​private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };
​/*** Locations of static resources. Defaults to classpath:[/META-INF/resources/,* /resources/, /static/, /public/].*/private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;

以上四个目录都可以配置静态资源.咱们可以放到任意一个静态资源目录.

访问的时候,不要访问静态资源的目录名称.

如果要修改的,不建议修改.

相关文章:

java-spring boot光速入门教程(超详细!!)

目录 一、引言 1.1 初始化配置 1.2 整合第三方框架 1.3 后期维护 1.4 部署工程 1.5 敏捷式开发 二、SpringBoot介绍 spring boot 2.1 搭建一个spring boot工程 2.2 使用idea创建项目 2.3 在线创建姿势 2.4 项目的目录结构 2.5 项目的运行方式 2.6 yml文件格式 2…...

一、Prometheus和Grafana搭建

一、服务端Prometheus二进制安装 https://prometheus.io/下载过慢可使用迅雷下载 tar -zxvf prometheus-2.53.0.linux-amd64.tar.gz启动 ./prometheus --config.fileprometheus.yml将其配置为系统服务&#xff1a; vim /usr/lib/systemd/system/prometheus.service[Unit] D…...

从零开始的python学习生活

pycharm部分好用快捷键 变量名的定义 与之前学习过的语言有所不同的是&#xff0c;python中变量名的定义更加的简洁 such as 整形。浮点型和字符串的定义 money50 haha13.14 gaga"hello"字符串的定义依然是需要加上引号&#xff0c;也不需要写&#xff1b;了 字符…...

MSP学习

一、迁移资源调研 完成导入&#xff0c;类似完成选型分析 离线工具调研 账单 二、迁移计划 1、 ecs 确认开始构建迁移环境后&#xff0c;平台将锁定当前标记的迁移资源范围及源端、目标端资源配置信息&#xff0c;并以此为迁移环境构建及迁移实施的数据依据 目标账号…...

生产力工具|Endnote X9如何自动更新文件信息

一、以EndNote X9.2版本为例&#xff0c;打开EndNote文献管理软件。 二、在菜单栏找到“Edit→Preferences...”&#xff0c;点击打开&#xff0c;弹出一个“EndNote Preferences”窗口。 三、进行设置 在打开的窗口左侧选择“PDF Handing”&#xff0c;右边会出现自动导入文献…...

【python】字典、列表、集合综合练习

1、练习1(字典) 字典dic,dic {‘k1’:‘v1’, ‘k2’: ‘v2’, ‘k3’: [11,22,33]} (1). 请循环输出所有的key dic {"k1": "v1", "k2": "v2", "k3": [11, 22, 33]} for k in dic.keys():print(k)k1 k2 k3(2). 请循环输…...

超融合服务器挂载硬盘--linux系统

项目中需要增加服务器的硬盘容量&#xff0c;通过超融合挂载了硬盘后&#xff0c;还需要添加到指定的路径下&#xff0c;这里记录一下操作步骤。 一&#xff1a;通过管理界面挂载硬盘 这一步都是界面操作&#xff0c;登录超融合控制云台后&#xff0c;找到对应的服务器&#…...

Kafka如何防止消息重复发送

Kafka 提供了几种方式来防止消息重复发送和处理。这些方式通常取决于生产者和消费者的设置和实现方式&#xff1a; 生产者端幂等性&#xff08;什么是幂等性&#xff09;&#xff1a; 幂等性生产者&#xff1a;从 Kafka 0.11 版本开始引入了生产者端的幂等性支持。生产者可以通…...

数据库设计原则介绍

数据库设计是一个重要的过程&#xff0c;它涉及到创建一个逻辑结构来存储和管理数据。良好的数据库设计可以确保数据的完整性、一致性、性能和安全性。以下是一些关键的数据库设计原则&#xff1a; 1. 数据规范化 (Normalization) 目的&#xff1a;减少数据冗余、提高数据一致…...

反馈神经网络与不同类型的神经网络:BP神经网络,深度感知机,CNN,LSTM

反馈神经网络与不同类型的神经网络&#xff1a;BP神经网络&#xff0c;深度感知机&#xff0c;CNN&#xff0c;LSTM 在神经网络的研究和应用中&#xff0c;我们经常听到BP神经网络、深度感知机&#xff08;MLP&#xff09;、卷积神经网络&#xff08;CNN&#xff09;、长短期记…...

轮播图案例

丐版轮播图 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> 基础轮播图 banner 移入移出</t…...

Spring 泛型依赖注入

Spring 泛型依赖注入&#xff0c;是利用泛型的优点对代码时行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改&#xff0c;同时在不增加代码的情况下增加代码的复用性。 示例代码&#xff1a; 创建实体类 Product package test.spri…...

C++ Linux调试(无IDE)

跨平台IDE编译调试C很方便&#xff0c;如QTCreate 、VSCode、Eclipse等&#xff0c;但是如果只能使用Shell控制台呢&#xff0c;gdb调试的优势就很明显了&#xff0c;在没有IDE的情况下&#xff0c;这个方式最有效。因为上手不是很难&#xff0c;特此整理 参考链接 目录 1、G…...

FFmpeg——视频拼接总结

最近需要做一个关于视频拼接的内容&#xff0c;需要将两个视频合成一个视频&#xff0c;使用opencv的话需要将视频读上来然后再写到文件了&#xff0c;这个会很消耗时间也没有必要。两个视频的编码格式是一样的&#xff0c;并不需要转码操作所以想法是直接将视频流补到后面&…...

springboot项目怎么样排除自带tomcat容器使用宝蓝德bes web中间件?

前言&#xff1a; 由于Spring Boot 1.x和2.x不兼容&#xff0c;BES提供了对应的Spring Boot Starter版本。 bes‑lite‑spring‑boot‑1.x‑starter.jar&#xff0c;适用于Spring Boot 1.x的版本。 bes‑lite‑spring‑boot‑2.x‑starter…...

响应式ref()和reactive()

文章目录 ref()reactive()ref对比reactivetoRefs与toRef ref() 作用&#xff1a;定义响应式变量。 语法&#xff1a;let xxxref(初始值)。 返回值&#xff1a;一个RefImpl的实例对象&#xff0c;简称ref对象或ref&#xff0c;ref对象的value属性是响应式的 注意点&#xff1…...

运维系列.Nginx中使用HTTP压缩功能

运维专题 Nginx中使用HTTP压缩功能 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550…...

vue3项目图片压缩+rem+自动重启等plugin使用与打包配置

一、Svg配置 每次引入一张 SVG 图片都需要写一次相对路径&#xff0c;并且对 SVG 图片进行压缩优化也不够方便。 vite-svg-loader插件加载SVG文件作为Vue组件&#xff0c;使用SVGO进行优化。 插件网站https://www.npmjs.com/package/vite-svg-loader 1. 安装 pnpm i vite-svg…...

数据库性能优化系统设计

设计一个数据库性能优化系统&#xff0c;目标是监测、诊断并改善数据库的运行效率&#xff0c;确保系统能够高效稳定地处理大量数据请求。以下是一个概要设计&#xff0c;包括关键模块、功能和实现思路&#xff1a; 1. 系统架构 分布式监控中心&#xff1a;采用分布式架构收集…...

MyBatisPlus-分页插件的基本使用

目录 配置插件 使用分页API 配置插件 首先&#xff0c;要在配置类中注册MyBatisPlus的核心插件&#xff0c;同时添加分页插件。&#xff08;可以放到config软件包下&#xff09; 可以看到&#xff0c;我们定义了一个配置类&#xff0c;在配置类里声明了一个Bean,这个Bean的名…...

用STM32CubeMX和TMC260驱动步进电机,这份PWM频率配置指南帮你避开新手常见坑

STM32CubeMX与TMC260步进电机驱动实战&#xff1a;PWM频率配置的黄金法则 第一次用STM32CubeMX配置TMC260驱动步进电机时&#xff0c;我盯着屏幕上那一堆定时器参数发愣——Prescaler、Period、Counter Mode...这些看似简单的数字背后&#xff0c;藏着让电机平稳运转或是疯狂抖…...

LOSEHU固件:解锁泉盛UV-K5/K6对讲机专业潜能的终极解决方案

LOSEHU固件&#xff1a;解锁泉盛UV-K5/K6对讲机专业潜能的终极解决方案 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 还在为对讲机原厂固件的功…...

如何在5分钟内免费激活Windows和Office?KMS_VL_ALL_AIO智能脚本终极指南

如何在5分钟内免费激活Windows和Office&#xff1f;KMS_VL_ALL_AIO智能脚本终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office办公软件激活而烦恼吗&#x…...

缺失值处理失效、类型推断崩塌、内存暴增…Polars 2.0清洗故障全解析,深度解读Arrow底层Schema约束机制

第一章&#xff1a;Polars 2.0数据清洗的核心挑战与演进脉络随着数据规模持续膨胀与实时分析需求激增&#xff0c;传统基于 Pandas 的数据清洗范式在内存效率、并行粒度和类型安全方面日益显露瓶颈。Polars 2.0 的发布并非简单功能叠加&#xff0c;而是以 Arrow-native 执行引擎…...

手柄不兼容PC游戏?试试ViGEmBus的虚拟控制器仿真技术

手柄不兼容PC游戏&#xff1f;试试ViGEmBus的虚拟控制器仿真技术 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否遇到过这样的情况&#xff1a;新买的…...

GEE引擎封挂实战:从M2参数到RunGate网关的完整配置指南

GEE引擎封挂实战&#xff1a;从M2参数到RunGate网关的完整配置指南 在游戏运营过程中&#xff0c;外挂问题一直是困扰开发者和运营者的顽疾。对于使用GEE引擎的游戏服务器来说&#xff0c;如何有效防范和打击外挂行为&#xff0c;维护游戏公平性&#xff0c;是每个技术团队必须…...

面试官最爱问的哈希表实战:用C++手撕‘存在重复元素II’(附滑动窗口优化思路)

哈希表实战&#xff1a;从暴力解法到最优解法的完整思维路径 在技术面试中&#xff0c;哈希表相关题目几乎是必考内容&#xff0c;而"存在重复元素II"这类问题更是高频出现。这道看似简单的题目背后&#xff0c;隐藏着对候选人算法思维、编码能力和沟通表达的全面考察…...

从洛伦兹吸引子到三体问题:用Python RK45方法探索混沌与天体物理的奇妙世界

从洛伦兹吸引子到三体问题&#xff1a;用Python RK45方法探索混沌与天体物理的奇妙世界 混沌系统与天体运动看似毫不相关&#xff0c;却共享着对初始条件极度敏感的数学本质。1963年&#xff0c;气象学家爱德华洛伦兹在简化大气对流模型时&#xff0c;意外发现了"蝴蝶效应…...

如何使用4个经过验证的技巧将Android联系人备份到Mac

联系人无疑是我们智能手机上最重要的数据。一旦失去联系&#xff0c;我们就会与这个世界上最亲爱的人失去联系&#xff1b;也许他们是家人、爱人、朋友、同学、同事、学生等。因此&#xff0c;联系人备份对我们来说非常重要。与将iPhone联系人备份到Mac相对容易不同&#xff0c…...

开源大模型部署案例:Pixel Language Portal镜像免配置快速上手教程

开源大模型部署案例&#xff1a;Pixel Language Portal镜像免配置快速上手教程 1. 产品概览 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将语言转换过程设…...