springBoot工程入门

news/2023/5/28 8:44:10

文章目录

  • 基本知识
  • 快速搭建springBoot工程
  • 起步依赖·原理分析
    • spring-boot-starter-parent
    • spring-boot-starter-web
  • 配置
    • yaml
      • 数据格式
      • 读取配置
    • profile
      • profile配置方式
        • 多profile文件方式
        • yml多文档方式
      • profile激活方式
    • 内部配置加载顺序
    • 外部配置加载顺序
  • 整合其他框架
    • Junit
    • redis
    • mybatis

springBoot是快速构建spring的技术

基本知识

spring缺点:1. 配置繁琐 2. 依赖繁琐(导包的版本怎么确定)

SpringBoot功能

  1. 自动配置
  2. 起步依赖,简化依赖的配置
  3. 辅助功能 eg.嵌入式服务器、安全、指标

springBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

官网文档地址:Spring Boot Reference Documentation

在创建项目时候,使用jar的方式打包
引导类是项目入口,运行main方法就可以启动项目
使用springboot和spring构建的项目,业务代码编写方式完全一样

快速搭建springBoot工程

搭建springBoot工程,定义HelloController.hello()方法,返回“Hello SpringBoot”

步骤① 创建Maven项目
步骤② 导入springBoot起步依赖
springboot工程需要继承的父工程:Inheriting the Starter Parent POM

    <!-- springboot工程需要继承的父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.1</version></parent><dependencies><dependency><!--web开发的起步依赖--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

步骤③定义Controller
在这里插入图片描述

步骤④编写引导类
在这里插入图片描述

步骤⑤启动测试
运行后,显示在8080端口
在这里插入图片描述
浏览器访问http://localhost:8080/hello
在这里插入图片描述
或者使用idea的快速构建即可代替上面的配置。
在这里插入图片描述
在这里插入图片描述

起步依赖·原理分析

spring-boot-starter-parent

spring-boot-starter-parent 中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。

在各种starter中,定义了完成该功能需要的坐标集合,其中大部分版本信息来自于父工程。

我们的工程继承parent、引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并不会存在版本冲突等问题。
在这里插入图片描述
一直查看父工程的配置文件,最终可以看到<properties>下面定义了很多版本信息
<dependencyManagement>中的依赖都根据<properties>来确定包的版本,这就是版本锁定

spring-boot-starter-web

查看配置文件,发现这个包已经自动将一些其他的包导入进来了
在这里插入图片描述

配置

默认配置文件明:application

2种配置文件明:propertiesyml/yaml

springBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)配置

  • properties
    在这里插入图片描述
  • yaml
    在这里插入图片描述
    如果存在多个配置,根据优先级读取:application.properties > application.yml > application.yaml

yaml

拓展名可以使用.yml.yaml

比较简洁,以数据为中心,
相较于xml,可以少写尾标签
相较于profile,可以看出来同一类的属性

# profile
server.port: 8081# yaml
server:port: 8082# xml
<server><port>8083</port>
</server>

基本语法

  • 大小写敏感
  • 数据值前面必须有空格作为分隔符
  • 用缩进表示层级关系
    • 缩进不允许使用Tab键,只能用空格,不同系统Tab键的空格数不同
    • 缩进的空格数目不重要,只要相同层级的元素左对齐就行
  • # 表示行注释,从这个字符到行尾,都会被解析器忽略

数据格式

  • 对象(map):键值对的集合
person:name: soonperson: {name: soon} # 行内写法
  • 数组:一组按次序排列的值,使用‘-’ 表示数组的每个元素
city:- beijing- shanghaicity: [beijing,shanghai] # 行内写法 
  • 纯量:单个值,不可再分
msg1: 'hello1 \n beijing' # 单引号 忽略转义字符
msg2: "hello2 \n shanghai" # 双引号 识别转义字符
  • 参数引用:${key}

读取配置

  1. @Value获取单个值比较方便,值多了就不方便
  2. Environment
  3. @ConfigurationProperties配置和对象相护传递

@Value
在这里插入图片描述
Environment.getProperty

import org.springframework.core.env.Environment;@RestController
public class HelloController {@Autowiredprivate Environment env;@RequestMapping("/getName")public String hello(){System.out.println(env.getProperty("person.name"));System.out.println(env.getProperty("city[0]"));return env.getProperty("name");}
}

@ConfigurationProperties
在这里插入图片描述添加注解处理器的依赖
在这里插入图片描述

profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。
profile功能就是来进行动态配置切换的。

profile配置方式

  • 多profile文件方式:提供多个配置文件,每个代表一种环境

    • application-dev.properties/yml开发环境
    • application-test.properties/yml测试环境
    • application-pro.properties/yml生产环境
  • yml多文档方式

    • 在yml中使用---分隔不同配置

多profile文件方式

多了三个不同环境的配置:dev pro test,切换环境的时候,只用在application.properties中指定spring.profiles.active
在这里插入图片描述运行之后发现端口就是8081
在这里插入图片描述

yml多文档方式

--- # 分割成不同部分
server:port: 8081
spring:config:on-profile: dev
---
server:port: 8082
spring:config:on-profile:  test
---
server:port: 8083
spring:config:on-profile: pro
---
spring:profiles:active: dev # 使用这个环境

在这里插入图片描述

profile激活方式

  • 配置文件:在配置文件中配置: spring.profiles.active=dev ,详见多profile文件方式
  • 虚拟机参数:在VM options指定: -Dspring.profiles.active=dev
  • 命令行参数: java -jar xxjar --spring.profiles.active=dev

虚拟机参数
在这里插入图片描述

命令行参数
在这里插入图片描述

在这里插入图片描述

D:\Java\code\IdeaProjects\springboot-profiles\target> java -j .\springboot-profile-0.0.1-SNAPSHOT.jar --spring.profiles.active=pro

在这里插入图片描述
--spring.config.location=配置文件路径 使用外部配置文件
--server.port=8088 端口号改为8088
--server.servlet.context-path=/hello 修改项目的访问路径,默认为/

内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

  1. file:./config/: 当前项目下的/config目录下
  2. file:./ :当前项目的根目录
  3. classpath:/config/: classpath的/config目录
  4. classpath:/ : classpath的根目录

优先级由高到低
在这里插入图片描述
打包后,javaresources路径下的内容都会放到classpath路径下

外部配置加载顺序

通过官网查看外部属性加载顺序,后面的属性源可以覆盖前面的属性源中定义的值。
在这里插入图片描述

整合其他框架

Junit

SpringBoot整合Junit,步骤:
①搭建SpringBoot工程
②引入starter-test起步依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

③编写测试类

import org.springframework.stereotype.Service;@Service
public class UserService {public void add(int a) {System.out.println("添加" + a);}
}

④添加测试相关注解

  • @RunWith(SpringRunner.class)
  • @SpringBootTest(classes =启动类.class),如果这个测试类和启动了是同一个包,则可以写成@SpringBootTest
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJunitApplication.class) //main中的引导类
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testAdd(){userService.add(1);}
}

⑤编写测试方法

在这里插入图片描述

redis

SpringBoot整合redis,步骤:
①搭建SpringBoot工程
在这里插入图片描述

②引入redis起步依赖
在这里插入图片描述

③配置redis相关属性
如果不配置,就是用本机的;可以在配置文件中配置

spring:data:redis:host: 127.0.0.1 # redis的主机ipport: 6379

④在测试类中注入RedisTemplate模板

    @Autowiredprivate RedisTemplate redisTemplate;

⑤编写测试方法,测试
在这里插入图片描述

mybatis

SpringBoot整合mybatis,步骤:
①搭建SpringBoot工程
在这里插入图片描述
②引入mybatis起步依赖,添加mysq|驱动

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

③编写DataSource和MyBatis相关配置

spring:datasource:url: jdbc:mysql:///springbootusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver

④定义表和实体类

create table t_user
(id       int auto_incrementprimary key,username varchar(32) collate utf8mb4_unicode_ci null,password varchar(32) collate utf8mb4_unicode_ci null
);
public class User {Integer id;String name;String password;//生产toString get set 方法
}

⑤编写sql

@Mapper
public interface UserMapper {@Select("select * from t_user")public List<User> findAll();
}

⑥测试

@RunWith(SpringRunner.class)
@SpringBootTest
class MybatisApplicationTests {@Autowiredprivate UserMapper userMapper;@Testvoid contextLoads() {List<User> all = userMapper.findAll();for (User user : all) {System.out.println(user);}}}

在这里插入图片描述
也可用xml写sql语句

spring:datasource:url: jdbc:mysql:///springbootusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# mybatis
mybatis:mapper-locations: classpath:Mapper/*Mapper.xml # mapper映射文件路径type-aliases-package: com.example.mybatis.domain # 实体类所在的包,这样resultType就可以不写包名,直接写类名就行

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

指数平滑指标怎么看?

一、应用 指数平滑可继续拆分为一次平滑&#xff0c;二次平滑和三次平滑&#xff08;即Holt-Winters法&#xff09;&#xff0c;一次平滑法为历史数据的加权预测&#xff0c;二次平滑法适用于具有一定线性趋势的数据&#xff0c;三次平滑法在二次平滑法基础上再平滑一次&#…

【易语言组合框和列表框联动】

添加组合框和列表框联动 右击组合框选择设置项目 列表框添加组合框得选中项 列表框1.加入项目 (组合框1.内容, )列表框双击删除内容 列表框1.删除项目 (列表框1.现行选中项)组合框和组合框联动 没啥写的 就是if判断和组合框清空与加入项目的方法 组合框3.清空 () .判断开…

易语言读取计算机配置,易语言取所有配置节名和配置项名

本视频教程演示了取配置节名称、取配置项名称、取所有配置节和所有配置项名称&#xff0c;通过了精易模块和多种方法来实现。视频链接&#xff1a;511遇见易语言教程教程源码:.版本 2.支持库 spec.程序集 窗口程序集_启动窗口.子程序 _按钮1_被单击.局部变量 序号, 整数型.如果…

易语言mysql清空一个表_易语言遍历和删除sqlite数据库信息方法

易语言如何遍历和删除sqlite数据库信息呢1、打开易语言&#xff0c;我们新建一个“Windows”窗口程序&#xff0c;进入到窗口程序集中2、在新建的窗口中添加2个编辑框&#xff0c;1个按钮组件。并修改组件的属性。3、我们双击启动窗口&#xff0c;在__启动窗口_创建完毕程序中&…

易语言快照和截取屏幕区域

本课录制了两个和截图有关的易语言命令&#xff0c;快照和截取屏幕区域&#xff0c;并且分快照窗口快照&#xff0c;全屏快照&#xff0c;保存快照&#xff0c;已经截屏区域等等。 视频链接&#xff1a; 511遇见易语言教程一、快照&#xff08;&#xff09; 主要用于截图 1、…

数据结构 - 学习笔记 - 红黑树前传——234树

数据结构 - 学习笔记 - 红黑树前传——234树简介结点类型与红黑树对应关系插入逻辑插入步骤演示2结点插入3结点插入&#xff08;红黑树旋转&#xff09;共对应6种红黑树情形有4种情形需要再平衡4结点插入&#xff08;红黑树变色&#xff09;234树转红黑树触发分裂有4种情形需要…

求一元二次方程的根【C++】

哈哈哈这个就图一乐&#xff0c;各位看官要铭记&#xff0c;眼过千遍不如手过一遍 求一元二次方程axbxc0&#xff08;a≠0&#xff09;的根 求根公式哦一元二次方程的求根公式是什么&#xff1f;_百度知道 #include<iostream> #include<cmath> using namespace s…

c语言怎样调用求根函数,编写函数求一元二次方程的根,并在main主函数中调用该函数 用c++编写...

满意答案sIXzVDhc2014.01.10采纳率&#xff1a;58% 等级&#xff1a;12已帮助&#xff1a;7410人#include #include void b1 (){float l,s,k;int a,b,c,h;printf ("************这是求根方程****************\n");printf("\n");printf("输入a,b,c的…

Solidity 中的数学(第 1 部分:数字)

本文开启了一系列关于在 Solidity 中进行数学运算的文章。第一个要讨论的话题是&#xff1a;数字。 介绍 以太坊是一个可编程的区块链&#xff0c;其功能可以通过将称为智能合约的可执行代码片段发布到区块链本身来扩展。这将以太坊与第一代区块链区分开来&#xff0c;在第一代…

WC2023游记

今年&#xff0c;我势必打破铜牌魔咒 Day -?~? 虽然已年及高二&#xff0c;但WC的讲课还是没有听懂多少&#xff0c;这段时间&#xff0c;北师大还有一名E队来我校训练&#xff0c;我只能感慨&#xff1a;“如果一个选手比你强&#xff0c;还比你小&#xff0c;那你就再也打…

计算机中顺序结构,2.逻辑结构(一):顺序结构

今天我们开始学习计算机科学中的逻辑结构。逻辑结构有三种&#xff1a;顺序结构、循环结构、条件结构(分支结构)。顺序结构&#xff1a;计算机命令是有先后执行顺序的&#xff0c;执行完一条再执行下一条命令。这样才能保证计算机根据我们的命令一步步完成不同的、复杂的操作。…

C语言基础——执行顺序

一.语句 在C语言中&#xff0c;程序的执行顺序是由语句组成的。程序的功能也是由执行语句实现的&#xff0c;一个语句执行一个功能&#xff0c;语句可以分为表达式语句与空语句。 1.表达式语句 表达式语句由表达式与分号组成。表达式是表达式语句的内容&#xff0c;分号是表…

编程逻辑及思想

1、“!”,"not"(逻辑非)、“&&”,"and",(逻辑与)、“||”,"or"(逻辑或)是三种逻辑运算符。不同语言符号不同&#xff0c;但是逻辑一样。 2、顺序结构&#xff0c;分支结构&#xff0c;循环结构&#xff0c;是编程或算法的三种基本结构&a…

计算机逻辑算法,算法逻辑

算法可以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤&#xff0c;或者看成按照要求设计好的有限的确切的计算序列&#xff0c;并且这样的步骤和序列可以解决一类问题。一般算法有顺序结构、选择结构、循环结构三种基本逻辑结构。中文名算法逻辑外文名Algorithm lo…

顺序表的原理

1、顺序表 1&#xff0c;顺序表特点 线性表的逻辑顺序与物理顺序一致&#xff0c;数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。对顺序表中的所有表项&#xff0c;即可以进行顺序的访问&#xff0c;也可以随机的访问&#xff0c;也就是说&#xff0c;    既…

问题:编译策略之代码逻辑顺序不正确(Optimization Level)

问题 曾经遇到过一个问题, 运行一段代码发现执行的逻辑顺序不正确, 而且在添加了其他语句后, 还会有不同的顺序, 但是都是不正确的. 如下: Debug 一下发现, 逻辑顺序为: 1> – 2> – 1> – 3>,而且在其中的添加 NSLog 后顺序还会发生变化 分析 在过程中 tes…

297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化 难度困难 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个…

C++ 单链表基本操作分析与实现 链表   链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结

C 单链表基本操作分析与实现链表 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。每个结点…

阿里巴巴离职DBA职业生涯总结

阿里巴巴离职DBA职业生涯总结 导读 去年很多朋友私下或新浪微博上在总结自己的职业生涯与职业规划&#xff0c;也感觉到很纠结与彷徨&#xff0c;尤其技术人的职业生涯&#xff0c;随年龄增加&#xff0c;一些优势逐渐丧失。4月13日数据库技术大会的主办方举行的晚宴上&#xf…