【3】SpringBoot基础

news2024/11/15 13:42:48

//从事微服务开发工作

SpringBoot提供一种快速使用Spring的方式

1、自动化 2、设置多个starter配置依赖比Maven直接管理更便捷 3、内置服务器

总结:自动配置,起步依赖,辅助功能

2.6.11版本的说明书

Spring Boot Reference Documentation

maven依赖黏贴

Spring Boot Maven Plugin Documentation

1、创建Maven工程

Archetype表

(100条消息) maven项目的Archetype常用选择_世界,你好的博客-CSDN博客_maven 常用archetype

是使用哪一个模板来初始化我们的项目:简单的说,Archetype是Maven工程的模板工具包。一个Archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成Maven工程的方式。Archetype会帮助作者给用户创建Maven工程模板,并给用户提供生成相关工程模板版本的参数化方法。
(100条消息) maven项目的Archetype常用选择_世界,你好的博客-CSDN博客_maven 常用archetype

常用Archetype
maven-archetype-quickstart
  默认的Archetype,基本内容包括:
  一个包含junit依赖声明的pom.xml
  src/main/java主代码目录及一个名为App的类
  src/test/java测试代码目录及一个名为AppTest的测试用例


maven-archetype-webapp
  一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:
  一个packaging为war且带有junit依赖声明的pom.xml
  src/main/webapp/目录
  src/main/webapp/index.jsp文件
  src/main/webapp/WEB-INF/web.xml文件

 问题一:Archetype quick start 模板中没有resources

(100条消息) intelliJ IDEA新建maven webapp原型项目没有resource文件夹_Katherine_ZXL的博客-CSDN博客

2、配置起步依赖

只需要导入两个坐标

<!--springboot工程需要继承的父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <dependencies>
    <!--web开发的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
    </dependencies>

3、配置项目

项目结构

写一个Controller

package com.itheima.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    
    @RequestMapping("/hello")   //访问路径
    public String hello(){
        return "hello springboot";
    }

}

写一个引入类

package com.itheima;

//引导类 后缀一般是Application结尾
//springboot 项目的入口
//运行整个Spring项目运行main方法即可
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class,args);
    }
}

SpringBoot快速构架 

spring initializr

起步原理分析

(1)spring-boot-starter-parentg

(2)spring-boot-starter-web

依赖继承,所定义的版本内调试好了要用的所有的东西的版本

yml

语法:

1、大小写敏感

2、数据值前必须有空格作为分隔符

3、缩进表示层级关系

4、缩进不允许使用tab键,只允许使用空格

5、缩进的空格数目不重要,只要相同的层级的元素左侧对齐即可

6、#表示注释

优先级顺序: properties>yml>yaml

方便度:properties->xml->yml(以数据为核心)

数据格式:

1、对象(map):键值对的集合

server:
  port: 8081

//也可以是行内写法
person:
  name: zhangsan
# 行内写法
person: {name:zhangsan}

2、数组:一组按次序排序的值

address:
  - bejing
  - shanghai
#行内写法:
address:[beijing,shanghai]

3、纯量: 单个的、不可再分的值

msg1: 'hello \n world'  #单引忽略转义字符
msg2: "hello \n world"  #双引识别转义字符

*4、参数引用

三种获取配置内容的方式

(1)VALUE注入

用美元符引用上面定义的变量

name:list

person: 
    name: ${name} # 引用上边定义的name值

 

 属性名可以是任意 ,绑定的要和yml一致

(2)ENVIRONMENT注入

但是一个一个写私有变量太麻烦了

于是加入@Autowired 注解 定义environment对象 然后通过getProperty访问

这种注入方式比value注入更加整洁 值少的话可以选择用value

@Autowired
    private Environment env;

    @RequestMapping("/eee")   //访问路径
    public String hello2(){
        System.out.println(name);
        System.out.println("--------------------");
        System.out.println(env.getProperty("name"));


        return "真他吗是个大傻逼";
    }

(3)CONFIGURATION注入 

1、@Component 注解 使SpringBoot识别为Bean文件

2、ConfigurationProperties

要注意注入时候的所要的属性是否有前缀,是否是前缀下的属性

定义在person前缀下的属性address数组,然后用这种方法注入传数组

 String[] address = person.getAddress();
        for (String s : address) {
            System.out.println(s);
        }

 加上这个依赖,书写配置时候会根据定义好的类给予提示

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

profile:

动态配置切换,适应不同的环境安装,如适配不同的数据库地址,服务端口等

(1)配置方式:

         多profile文件方式

         yml多文档方式

(2)激活方式:

        配置文件 

       虚拟机参数

       命令行参数

设置如下文件,分别是开发,测试,生产设置,端口设置分别为8080,8081,8082,8083

 在默认的里面写入以下代码即可配置成dev结尾的文件

spring.profiles.active=dev

yml版本的:

---
server:
  port: 8081

spring:
  config:
    activate:
      on-profile: dev
---
server:
  port: 8082

spring:
  config:
    activate:
      on-profile: test
---
server:
  port: 8083

spring:
  config:
    activate:
      on-profile: pro
---
spring:
  profiles:
    active: pro

用三个横杠可以分割yml文件 “---”

 以上是通过更改配置文件来更改,以下提供不用更改配置文件的方式

设置虚拟机参数

 或者设置命令行参数:前面固定写法为两个-

命令行可以通过idea上面窗口设置,也可以在程序被打成jar包后在windows shell里设置

项目内置文件加载顺序:

1、file:./config/:   当前项目下的/config目录下

2、file:./          :当前项目下的根目录

 3、classpath:/config/:  classpath的/config目录 

4、classpath:/:  classpath的根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效

可以理解为:

file为总文件目录

classpath是moudule模块目录

但是打包jar包不会将非模块的配置文件打包入内

项目访问默认方式设置:

srver.servlet.context-path=/hello

在controller里面的"/hello"是资源访问方式

项目外部配置加载顺序:

Core Features (spring.io)

上传部署时候会用到 统一适配 到时候再查

整合Redis(待学习Redis)

默认连接本地ip 端口号:6379

 @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testSet() {
        //存入数据
        redisTemplate.boundValueOps("name").set("zhangsan");

    }

    @Test
    void testGet() {
        //获取数据
        Object name = redisTemplate.boundValueOps("name").get();
        System.out.println(name);
    }

如果想要更改端口号,(不用本机的时候)对Redis进行配置

可以在yml里更改:

spring:
  redis:
    host: 127.0.0.1 #redis的主机ip
    port: 6379
    
    
  

整合Mybatis

纯注解开发

代表编译时候坐标不生效,启动时候生效 

先写实体类

再定义配置信息

配置数据库

注解开发

@Mapper
public interface UserMapper {

    @Select("select * from user")
    public  List<User> findAll();

如果不写注解需要编写配置文件来制作映射

@Mapper
public interface UserXmlMapper {

    public List<User> findAll();
}

PostMan

(100条消息) 接口测试之Postman使用全图文指南(原来使用Postman测试API接口如此简单)_软测小生的博客-CSDN博客_本地测试用postman怎么设置url

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第九层(8):STL之set/multiset

文章目录前情回顾set/multiset概念区别构造函数赋值函数大小操作函数交换函数插入函数删除函数查找函数统计函数为什么set不可以插入重复数据pair数组pair数组创建怎么样去改变set容器的排序规则下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一…

智公网:一级消防师要掌握的知识点!

一、建筑物的耐火等级 1、建筑物的耐火等级分为四级&#xff0c;一、二、三、四级。 2、节点缝隙或金属承重构件节点的外露部位&#xff0c;应做防火保护层。 3、民用建筑的耐火等级、层数、长度和面积&#xff0c;一二级最大防火分区的长度250m。多层建筑最大允许建筑面积2…

【gcc/g++/gdb/cmake】命令

文章目录参考资料一、gcc/g/make1 gcc和g的区别2 gcc/g与make区别3 make与cmake区别二、开发环境搭建1 编译器&#xff0c;调试器&#xff0c;CMake安装2 GCC编译器2.1 编译过程2.1.1 -E 预处理-Pre-Processing .i文件2.1.2 -S 编译-Compiling .s文件2.1.3 -C 汇编-Assembling …

软件工程(二)——需求工程、统一建模语言UML

目录 一、需求获取 二、需求分析 1.结构化需求分析 2.面向对象分析方法OOA 三、UML 41视图 四、UML 图 (1)用例图 (2)类图、对象图 (3)顺序图 &#xff08;4&#xff09;活动图 &#xff08;5&#xff09;状态图 &#xff08;6&#xff09;通信图 软件需求指用户对系…

【科研】ET-BERT代码分析

0. 数据集 论文使用的TLS1.3数据集是从 2021 年 3 月到 2021 年 7 月在中国科技网 (CSTNET) 上收集的。 如果要使用自己的数据集的话&#xff0c;需要检查数据格式是否与datasets/cstnet-tls1.3/目录下一致&#xff0c;并且在data_process/目录下指定数据集路径。 用于微调的…

Pomotroid 使用指南:一款高颜值 PC 端番茄时钟

文章首发于个人公众号&#xff1a;「阿拉平平」 番茄工作法作为一套高效易行的时间管理方案&#xff0c;是由意大利人弗朗西斯科西里洛于 1992 年创立的。作者发明的初衷源自于自身严重的拖延症&#xff0c;于是他找来一个厨房用的番茄计时器&#xff0c;调到 10 分钟&#xff…

游戏SDK(二)框架设计

前言 根据上一篇游戏SDK&#xff08;一&#xff09; 客户端整体架构&#xff0c;介绍了游戏SDK 及 游戏SDK的需求分析。根据需求分析&#xff0c;对游戏SDK的设计分为3大块&#xff1a; 客户端&#xff1a;接口统一&#xff0c;做好逻辑转发和处理。具体渠道具体实现&#xf…

【高并发】- 生产级系统搭建 - 4

前言 关于高并发系统中&#xff0c;当前比较热门的还是属于“秒杀”系统&#xff0c;前面章节在整理了“秒杀”系统的相关设计概念后&#xff0c;本章节&#xff0c;来讲解扣减库存相关的业务逻辑。 1 库存的那些事 一般电商网站中&#xff0c;购买流程一般都是这样的&#xff…

多线程之Callable接口、ReentrantLock、信号量 Semaphore以及CountDownLatch

目录&#xff1a;一、Callable接口Callable的用法小结二、ReentrantLockReentrantLock 的用法ReentrantLock 和 synchronized 的区别&#xff1f;为什么有了 synchronized 还需要 juc(java.util.concurrent) 下的 lock&#xff1f;三、信号量 Semaphore如何理解信号量&#xff…

Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

本节内容使用用例基类自定义TestSuitecollect-only的实现testlist的实现用例tags的实现rerun-fails的实现命令行参数的使用更简单的用例编写使用用例基类因为每条用例都需要从excel中读取数据&#xff0c;解析数据&#xff0c;发送请求&#xff0c;断言响应结果&#xff0c;我们…

阿里云ECS学习笔记1

ECS&#xff1a;弹性计算服务。CPU可以热插、内存可变大变小、硬盘可以增加~ 注册&#xff1a; 在企业中&#xff0c;应该以企业的身份进行注册&#xff0c;而不是以个人身份进行注册。 手机号&#xff1a;行政部门专门管理注册的账号资源的&#xff0c;而不使用个人或者老板…

【可解释性机器学习】解释基于XGBoost对泰坦尼克号数据集的预测过程和结果

解释基于XGBoost对泰坦尼克号数据集的预测过程和结果1. 训练数据2. 简单的 XGBoost 分类器3. 解释重量4. 解释预测5. 添加文本特性参考资料本文介绍如何分析XGBoost分类器的预测&#xff08; eli5也支持 XGBoost和大多数 scikit-learn树集成的回归&#xff09;。 我们将使用 Ti…

【数据结构】8.5 归并排序

文章目录相邻两个有序子序列的归并归并排序算法归并排序算法分析基本思想 将两个或两个以上的有序子序列归并为一个有序序列。在内部排序中&#xff0c;通常采用的是2-路归并排序。 即&#xff1a;将两个位置相邻的有序子序列 R[l…m] 和 R[m1…n] 归并为一个有序序列 R[l…n]…

1个寒假能学会多少网络安全技能?

现在可以看到很多标题都声称三个月内就可以转行网络安全领域&#xff0c;并且成为月入15K的网络工程师。那么&#xff0c;这个寒假的时间能学多少网络安全知识&#xff1f;是否能入门网络安全工程师呢&#xff1f; 答案是肯定的。 虽然网络完全知识是一门广泛的学科&#xff…

在线支付系列【9】微信支付之申请微信公众号

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言申请微信公众号前言 由于微信支付的产品体系全部搭载于微信的社交体系之上&#xff0c;所以直连商户或服务商接入微信支付之前&#xff0c;都需要有一个微信社交载体&#xff0c;该载体对应…

天啦撸~ChatGPT通过国际软件测试工程师(ISTQB)认证了~

天啦撸&#xff01;目前最火的AI应用ChatGPT通过ISTQB认证了~ 近期&#xff0c;国外的一位工程师&#xff0c;放出了他用ChatGPT通过认证的相关信息。 ChatGPT相信大家都知道是什么了&#xff0c;ISTQB相信很多测试小伙伴也不陌生&#xff0c;而且很多考证的小伙伴也对此梦寐以…

Linux之网络性能测试工具netperf实践

一、netperf简介 Netperf是一种网络性能的测量工具&#xff0c;主要针对基于TCP或UDP的传输。Netperf根据应用的不同&#xff0c;可以进行不同模式的网络性能测试&#xff0c;即批量数据传输&#xff08;bulk data transfer&#xff09;模式和请求/应答&#xff08;request/rep…

公司通知要大裁员,hr太强势,和所有人吵起来,老板见势不妙,不得不答应大家要求,把HR一起裁掉了!...

在裁员中&#xff0c;hr一般都会代表老板的利益和员工对抗&#xff0c;但如果hr和员工闹翻了&#xff0c;老板会维护hr吗&#xff1f;一位网友说&#xff1a;一上班就收到消息要裁员&#xff0c;立马让报上名单面谈&#xff0c;锁电脑关权限。后面那些人面谈的时候吵起来了&…

OpenAI Chatgpt注册及使用教程

零、什么是chatgpt?​ 1、简介 ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;是OpenAI于 2022 年 11 月推出的聊天机器人。它建立在 OpenAI 的GPT-3大型语言模型家族之上&#xff0c;并经过微调&#xff08;一种迁移学习的方法&#xff09;…

双点双向的ISIS与OSPF、OSPF与OSPF、ISIS与ISIS环境以路由策略解决(1tag、2tag、4tag介绍与配置)

3.1.1 双点双向的ISIS与OSPF、OSPF与OSPF、ISIS与ISIS环境以路由策略解决&#xff08;1tag、2tag、4tag介绍与配置&#xff09; OSPF与ISIS双点双向 次优的产生与解决&#xff1a; 由于OSPF引入外部路由之后其优先级为150&#xff0c;再由ASBR进行双向引入之后。 原先OSPF外部…