文章目录

  • SpringBoot入门
    • 一、关于:约定大于配置
    • 二、创建SpringBoot项目---起步案例
      • 创建SpringBoot项目
      • 案例
      • 创建项目方式2:通过aliyun网站创建
      • 创建项目方式3---基于官方地址创建
    • 三、配置项目
      • 项目结构
      • 自定义配置
    • 四、SpringBoot原理(重点)
      • 4.1.starter
      • 4.2、SpringBoot应用的POM文件(重要)
      • 4.3、Java配置方式
      • 4.4、SpringBoot自动配置
      • 4.5、全局配置文件
    • 五、多环境配置

什么是框架?
框架就是软件的半成品。
在这里插入图片描述

SpringBoot入门

一、关于:约定大于配置

SpringBoot采用了习惯优于配置/约定大于配置的理念快速的搭建项目的开发环境,我们无需或者进行很少的相关Spring配置就能够快速的将项目运行起来。

即尽可能的减少配置,用约定去做配置,官方提供了很多约定,我们只需要在约定的地方配置即可。

什么是约定?如何理解?
比如我们的javaweb项目,配置文件必须放在resouces文件下,前端代码必须放在webapps文件夹下 ,java代码放在Java文件夹下。把对应的文件放在指定的位置就不用额外的配置了,springboot也是这种约定配置。

二、创建SpringBoot项目—起步案例

创建SpringBoot项目

创建的时候网址换一下更快,一般不会出问题

https://start.aliyun.com

在这里插入图片描述
过程需要网络畅通
在这里插入图片描述
在这里插入图片描述

等待项目加载完成。项目(就是web项目)结构:

在这里插入图片描述
如果刚进去是报错页面,就是maven没有正确添加,正确配置一下Maven就可以了

案例

package com.situ.bean;import lombok.*;import java.time.LocalDate;//使用lombok:在pom.xml里面引入依赖,添加getter和setter方法
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Student {//数据模型(每一行student的数据存一行),用来保存数据://属性的名字尽量要和数据库里面的名字对应,同时遵循java的命名规范private Integer id;private String  stuId;private String name;}
package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.beans.ConstructorProperties;@Controller //表示这是一个控制器类
@RequestMapping("/test") //为这个控制器类配置一个地址public class TestController {@ResponseBody  //能把对象转成Json返回给前端@GetMapping("/hello")//为这个方法配置一个地址public Student hello(){//这个方法用于创建了Student对象,并添加@ResponseBody注解,把对象转成Json返回给前端:Student zs = new Student(1, "22120", "zs");return  zs;//关于这个方法的访问:在main方法里面启动程序,然后在地址栏输入localhost:8080/test/hello}}

在这里插入图片描述
示例二:
在浏览器页面输入的参数,我们能够接收,接收参数并进行封装成对象,然后将对象返回json形式 :

package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller//代表这是一个控制器
@RequestMapping("/test") //配置地址
public class Test2Controller {//现在要求在浏览器页面输入的参数,我们能够接收,接收参数并进行封装成对象,然后将对象返回json形式 :@ResponseBody@GetMapping("/hello2") //给这个方法配置地址public Student test2(Student student){//能自动将前端发过来的数据映射到对象的属性,前提:前端传参的参数名和属性名要完全一致。System.out.println(student);return student;//将返回数据转成Json}
}

在这里插入图片描述
在这里插入图片描述

创建项目方式2:通过aliyun网站创建

网址:https://start.aliyun.com/
在这里插入图片描述
添加我们所需要的东西就行:比如:
在这里插入图片描述

在这里插入图片描述
获取源码
在这里插入图片描述
在这里插入图片描述
解压缩就能看见这是一个web项目,用我们的IDEA打开就行了。是可以正常启动的。

创建项目方式3—基于官方地址创建

也可以通过默认地址创建—基于官方地址创建。版本是3.x,但是经常出问题,所以有人发明了start.springboot.io,可以将地址换成这个,和官网的其实一样
同样也能通过官网直接创建项目

三、配置项目

项目结构

在这里插入图片描述
注意:我们自定义的代码、包和启动类是平级的,我们写SpringBoot项目,Java代码一定要写在和启动类平级或者写在和启动类平级的包里面,这样才能生效。

写在其它地方也是可以的,但是需要额外配置很多东西。

静态资源:html/css/js/图片… 放在static文件夹下。

templates:不能放jsp(图片写错了),能放thymeleaf。是放动态资源的

自定义配置

# 应用服务 WEB 访问端口tomcat的端口号
server.port=8080# 自定义配置:添加上下文路径:
server.servlet.context-path=/start
#那么项目的访问路径就变成了:localhost:8080/start/...
#目前就是变成了:localhost:8080/start/test/hello

在这里插入图片描述

四、SpringBoot原理(重点)

为什么能简化整合(不用写那么多配置)?为什么坐标不用写版本?

4.1.starter

一个starter就是一个开发场景的支持( 依赖(jar包) + 配置)。SpringBoot为我们提供了简化企业级开发绝大多数场景的支持(提供了多个starter),
我们在进行项目开发的过程中只需引入对应的starter(创建SpringBoot应用时可选择),
相关的依赖和配置就会被内置到项目中(消除人工配置)。

原来的spring和其它框架整合,需要写很多配置,现在有了starter,starter里面自带配置,就不用自己写了。
这个配置写了,只是不用我们程序员自己写了,由官方开发人员写好了。

也就是说用springboot去整合其他的框架的时候,我们要去找对应的starter,有了starter,jar包和配置都有了。通用的约定配置他可以写,但是一些特定的比如连接数据库的四大参数他不能写 ,那这种就写在了自定义配置部分。

在这里插入图片描述

4.1.1、starter依赖
一个starter依赖表示的不是一个依赖,而是某种开发环境所需的一组依赖

Spring Web — spring-boot-starter-web
MyBatis Framework — mybatis-spring-boot-starter
依赖:

在这里插入图片描述

4.1.2、starter配置
pom文件中引入的starter除了导入依赖,还引入了配置

配置用被@Configuration标注的配置类表示,配置在配置类中进行配置
配置类中有被@Bean标注的方法,用来生成特定的对象并让SpringIOC容器进行管理
通过以上的操作,大部分配置用户就不用自己进行配置了。

以后的开发中,如果需要用到哪个模块,就去导入对应的starter。

配置:

在这里插入图片描述

4.2、SpringBoot应用的POM文件(重要)

以前都需要写GAV坐标,现在我们都不需要写GAV坐标了。其实GAV版本是有的,原因:

4.2.1、基于Spring官方服务器创建的SpringBoot应用

继承spring-boot-starter-parent.pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- SpringBoot应用中的pom 继承了spring-boot-starter-parent.pom --><!-- spring-boot-starter-parent.pom又继承了spring-boot-dependencies.pom--><!-- 在spring-boot-dependencies.pom已经对主流的框架的版本进行了声明 --><!-- 继承父工程:就继承父工程里面所有的配置--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/> </parent></project>
引入了maven对springboot应用支持的插件spring-boot-maven-plugin<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>tech.code2048.springboot.demo.SpringbootDemo1Application</mainClass><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>

分析

pom工程继承,继承了父工程之后就能够使用父工程中的“配置”;
我们自己创建的SpringBoot工程继承自spring-boot-starter-parent这个父工程;
spring-boot-starter-parent继承的spring-boot-dependencies;
spring-boot-dependencies里面有dependencyManagement

dependencyManagement的作用?
1.声明了相关jar包的版本(只是声明,没有导入的作用)
2.如果在pom.xml文件中引入了该jar包不指定版本,就使dependencyManagement声明的版本。

3.如果声明的版本不合适,就要在导入jar包的位置声明自己需要的版本。

用来规定项目引入的依赖的版本;
如果项目的dependency标签中没有指定版本,那么就使用dependencyManagement中规定的版本;
dependencyManagement只是规定依赖的版本,并没有引入依赖;
如果dependencyManagement中定义的版本不合适,就需要自己在依赖中手动指定版本去覆盖。

4.2.2、基于Aliyun服务器创建的SpringBoot应用

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>tech.code2048</groupId><artifactId>01_springboot_start_aliyun</artifactId><version>1.0.0</version><name>01_springboot_start_aliyun</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.4.1</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

分析:
没有继承父工程;
直接定义dependencyManagement。
在这里插入图片描述

4.3、Java配置方式

如果我们需要在SpringBoot应用中整合一种新的开发场景,只需在pom.xml引入对应的starter即可

一个starter不仅包含依赖,还包含相应的配置,starter中包含的配置都是通过Java类实现的——Java配置方式

4.3.1、Spring版本发展

随着Spring版本的迭代,配置方式也在发生变化Spring 1.x
所有的bean的配置只能通过xml完成
Spring 2.x
基于JDK1.5对注解的支持,Spring 2.x开始支持注解
企业开发中到底是用xml配置还是用注解?
对基础配置、引用的第三方依赖中的配置使用xml完成:例如数据源配置
业务开发使用注解:例如controller、service
Spring 3.x
Spring开始提供基于Java的配置方式
Spring 4.x
xml、注解、Java

4.3.2、xml配置

<!--applicationContext.xml-->
<bean id="stu" class="tech.code2048.beans.Student"></bean>
<bean id="date" class="java.util.Date"></bean>

4.3.3、注解配置

@Component
public class Student{}

4.3.4、Java配置方式
创建配置类

@Configuration
public class SpringConfig{@Beanpublic Date getDate(){return new Date();}
}

4.4、SpringBoot自动配置

在这里插入图片描述

4.5、全局配置文件

SpringBoot针对不同的开发场景提供默认的属性配置,如果默认的配置不能满足开发的需要,我们需要对属性配置进行修改

SpringBoot应用提供了一个全局配置文件application.properties用于进行自定义配置

全局配置文件支持两种语法配置:

properties键值对配置

yaml语法的配置

4.5.1、基于properties配置

配置数据源  (key必须按照SpringBoot的要求)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=admin123配置映射文件路径及实体类的包名
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
mybatis.type-aliases-package=tech.code2048.springboot.demo.entity

4.5.2、基于yaml配置
缩进原则:缩进必须有两个空格,下一级必须比上一级有两个空格。
值的前面必须有一个空格

spring:datasource:url: jdbc:mysql://localhost:3306/db_2mybatis?characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: admin123mybatis:mapper-locations: classpath:mappers/*Mapper.xmltype-aliases-package: tech.code2048.springboot.demo.entity

4.5.3、常用的全局配置

server:port: 9999servlet:context-path: /start

4.6、自定义Banner
在SpringBoot应用启动的时候是有一个默认启动图案的。

这个默认图案支持自定义配置

在resources目录创建一个banner.txt
在banner.txt文件中定义图案http://patorjk.com/software/taag/

五、多环境配置

开发
测试
生产

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

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

相关文章

ansible 版本升级

1. 服务器上查看对应ansible 可安装的版本 yum info ansible 对比官网,服务器对应ansible 版本比较地址,不利于了解新版本的属性。 2. 升级比较新的ansible 版本,安装epel-release wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm rpm -iv…

企业微信API接口发消息实战:从0到1的技术突破之旅

摘要&#xff1a;本文详细介绍了通过企业微信官方API接口实现消息发送功能的完整实战流程。首先阐述了企业微信API在数字化办公中的重要性&#xff0c;重点讲解了消息发送接口的应用场景。实战部分分为前期准备、开发环境搭建和具体实现三个环节&#xff0c;包括创建企业微信应…

Linux的小程序——进度条

为了写出这个小程序我们先来了解几个知识点(一)回车和换行先以写作文为例子了解一下&#xff0c;当在一行中写了一半&#xff0c;由此处位置往下一行的操作叫做换行&#xff0c;回到该行的开头位置为回车。而在c语言中\n帮我们完成了换行和回车两个动作&#xff0c;那单纯回车是…

在macOS上使用VS Code和Clang配置C++开发环境

本文基于VS Code官方文档&#xff0c;详细介绍如何在macOS系统下配置Clang/LLVM编译器与VS Code的C开发环境。通过本文&#xff0c;你将学会如何搭建开发环境、创建并调试C程序&#xff0c;适合C初学者和需要在macOS上进行C开发的开发者。 前提条件 在开始配置前&#xff0c;…

Ganttable 基于工时的进度分析

时间进度分析是 Ganttable 提供的高级进度管理功能&#xff0c;它基于实际工作时长&#xff0c;结合计划预估工时&#xff0c;可精准计算项目及任务的完成度。开启进度分析开启进度分析功能的操作如下&#xff1a;在时间管理页面&#xff0c;点击右上角的 “设置” 按钮&#x…

duiLib 自定义资源目录

前面的demo&#xff0c;把布局文件放在默认目录了&#xff0c;想着应该也可以自定义资源路径。先debug看下默认目录是什么路径。设置调试选项&#xff0c;调试信息格式改为程序数据库&#xff08;/Zi&#xff09;再调试项目&#xff0c;选中监视1&#xff1a;在监护窗口中查看变…

YOLO-01目标检测基础

1、概念目标检测&#xff08;Object Detection&#xff09;是计算机视觉中的一个重要领域&#xff0c;它涉及到识别图片或视频某一帧中的物体是什么类别&#xff0c;并确定它们的位置。通常用于多个物体的识别&#xff0c;可以同时处理图像中的多个实例&#xff0c;并为每个实例…

Linux->动静态库

目录 引入&#xff1a; 一&#xff1a;动静态库的介绍 1&#xff1a;库的本质 2&#xff1a;库的类别及优缺点 3&#xff1a;动态链接 4&#xff1a;静态链接 二&#xff1a;头文件和库的查找 三&#xff1a;静态库的制作和使用 1&#xff1a;制作 2&#xff1a;指令打…

【LY88】双系统指南及避坑

一. Windows重装&#xff08;前提是Windows可正常使用&#xff0c;优点是无需U盘&#xff09; 1. PE工具和系统镜像 机械师只只提供的资源链接 完成微PE工具的安装并下载了系统镜像之后&#xff0c;&#xff08;如果要装ubuntu的话&#xff09;需确认磁盘分区格式和引导项。前…

Ubuntu22.04.1搭建php运行环境

步骤 1: 更新你的系统 首先&#xff0c;确保你的系统是最新的。打开终端并运行以下命令&#xff1a; sudo apt update sudo apt upgrade步骤 2: 安装Apache Web服务器 使用Apache作为你的Web服务器。运行以下命令&#xff1a; sudo apt install apache2安装完成后&#xff0c;你…

防止飞书重复回调通知分布式锁

## 场景销售订单下&#xff0c;明细25明细款&#xff0c;发起飞书审批&#xff0c;飞书设置自动审核通过&#xff0c;导致会收到两次审核通过通知加了分布式锁 &#xff0c;仍导致执行业务执行两遍了String lockKey "feihsu-approvalNotify:" instanceCode; RLock …

数据结构:下三角矩阵(Lower Triangular Matrix)

目录 什么是下三角矩阵&#xff1f; 我们要存哪些元素&#xff1f;一共几个&#xff1f; 推导索引映射公式 核心问题&#xff1a;给定 (i,j)&#xff0c;如何计算 k&#xff1f; 什么是下三角矩阵&#xff1f; 一个 n n 的矩阵&#xff0c;如果它在主对角线以上的所有元…

力扣209:长度最小的子数组

力扣209:长度最小的子数组题目思路代码题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回…

采购管理系统哪家性价比高?

在企业数字化转型进程中&#xff0c;采购管理系统已成为降本增效的核心工具。但面对市场上五花八门的产品&#xff0c;“性价比” 成为企业选型时的关键考量 —— 既要功能贴合业务需求&#xff0c;又要成本可控&#xff0c;还需兼顾实施效率与长期扩展性。以下从性价比维度解析…

轻松打造Unity小游戏AR体验

目录 AR会话初始化 平面追踪与相机定位 用户交互处理 实时渲染 Unity 小游戏宿主现已支持 AR 功能&#xff0c;本文介绍如何从零开始创建一个可以在Unity小游戏宿主上运行的AR小游戏&#xff0c;欢迎大家试用&#xff01; 想为你的小游戏注入虚实交融的魔力吗&#xff1f;…

IFCVF驱动+vhost-vfio提高虚拟机网络性能

​​IFCVF (Intel FPGA Virtual Function)​​ 是 Intel 为其基于 FPGA 的智能网卡开发的 ​​SR-IOV 虚拟功能驱动​​,属于 ​​PF4 (Physical Function 4)​​ 架构的一部分。它是专为高性能网络虚拟化场景设计的硬件加速解决方案。 云计算智能网卡(soc)或DPU场景下,IFC…

Hook捕获并拦截文件创建行为

需要用到minhook 先编译DLL #include <Windows.h> #include <string> #include <TlHelp32.h> #include <Shlwapi.h>#include "MinHook.h" // 自动选择正确的MinHook库 #pragma comment(lib, "Shlwapi.lib") #if defined(_M_X64) …

图像平滑处理

图像平滑处理四种常用方式1. 均值滤波 (cv2.blur())2. 高斯滤波 (cv2.GaussianBlur())3. 中值滤波 (cv2.medianBlur())4、双边滤波 (cv2.bilateralFilter())总结存图时遇到一个中文版乱码问题四种常用方式 平滑处理&#xff08;也称为模糊处理&#xff09;&#xff0c;用于减少…

fortigate的waf功能

在系统管理----可见功能----web应用防火墙打开waf功能Web 应用程序防火墙 &#xff08;WAF&#xff09; 配置文件可以检测和阻止已知的 Web 应用程序攻击。您可以将 WAF 配置文件配置为使用签名和约束来检查 Web 流量。您还可以强制实施 HTTP 方法策略&#xff0c;该策略控制与…

AI Compass前沿速览:可灵创意工坊、字节Coze StudioCoze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源

AI Compass前沿速览&#xff1a;可灵创意工坊、字节Coze Studio&Coze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态&#xff0c;通过六大核心模块的系统化组织&#xff0c;为不同层次的学…