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

SringBoot入门

文章目录

  • 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/
上面这个网站能将文字转成图案显示
在banner中写的是什么,项目启动就会显示什么

五、多环境配置

开发
测试
生产
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述执行效果:
在这里插入图片描述

http://www.lryc.cn/news/605293.html

相关文章:

  • uvm-tlm-sockets
  • 关于MyBatis 的懒加载(Lazy Loading)机制
  • 腾讯云市场排名
  • linux进程概念(三)进程状态
  • COZE 开源,新一代 AI Agent 本地部署一条龙
  • 借助 Wisdom SSH 的 AI 助手构建 Linux 开发环境
  • 2. Agent与 React流程
  • 智能Agent场景实战指南 Day 26:Agent评估与性能优化
  • 【面试场景题】随机立减金额计算
  • 三十四、【Linux常用工具】rsync+inotify实时同步演示
  • 游卡,快手26届秋招内推
  • Cortex-M处理器的优势?
  • 解决Nginx的HTTPS跨域内容显示问题
  • Linux日志管理和时钟同步配置指南
  • DFT设计中的不同阶段介绍
  • 【C语言类型转换坑】乘法溢出隐患发现与正确写法
  • 嵌入式系统分层开发:架构模式与工程实践(二)(创建任务篇(二))
  • CSS-in-JS 动态主题切换与首屏渲染优化
  • 人类语言驱动物理机制建模的AIVC
  • Zynq SoC 中断控制系统设计与实现:基于 GPIO 的中断驱动开发
  • 亚马逊Kiro重塑AI编程:从“氛围编码”到规范驱动的革命
  • 论文研读(2025 KDD):细粒度人体轨迹建模
  • Python多线程利器:重入锁(RLock)详解——原理、实战与避坑指南
  • C++代码题部分(1)
  • 模型相关类代码回顾理解 | BatchNorm2d\fc.in_features\nn.Linear\torchsummary
  • c#_文件的读写 IO
  • C#_创建自己的MyList列表
  • 【36】C# WinForm入门到精通 —— flowLayoutPanel 控件 拖拽大小 “在父容器中停靠” ,“取消在父容器中停靠”
  • 独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升
  • Java内存模型(JMM)