SpringBoot (1)

news2024/11/15 12:27:03

目录

1 入门案例

1.1 环境准备

1.2 编写pom.xml

1.3 编写入口程序

1.4 编写接口

1.5 编写配置

1.6 快速部署

1.6.1 打jar包

1.6.2 部署

1.7 访问接口

2 全注解开发

2.1 常用注解

2.2 属性绑定注解

2.2.1 注册组件

2.2.2 @ConfigurationProperties(prefix="teacher")

2.2.3 @EnableConfigurationProperties

3 整合项目流程

3.1 导依赖

3.2 找redis的自动配置类

3.3 找redis的配置属性类


SpringBoot的底层原理仍然是Spring,使用SpringBoot框架带来如下优势

        (1) 快速开发

                能快速创建一个生产级别的Spring应用

        (2) 简化整合

                SpringBoot提供了可选的场景启动器(starter),整合项目只需要引入对应的场景启动器(例: web-starter、mybatis-starter等)即可

        (3) 简化配置

                遵循"约定大于配置"的规则,只要引入了对应的"场景启动器(starter)",则该启动器的所有配置都按默认配置(但也可以自定义配置,只需要修改配置文件即可)

                集中化管理配置:所有配置都写在同一个文件中

        (4) 简化部署

                SpringBoot直接嵌入了Tomcat、Jetty、Undertow,因此不需要再将项目打war包后放在Tomcat中部署,只需要将项目打jar包后放在java环境中用java -jar命令即可

        (5) 简化监控

                SpringBoot自带一些指标监控、健康检查(k8s检查应用是否存活)

        (6) 简化运维

                SpringBoot可以采用外部化配置(将配置文件放在jar包外面),可以直接在外部修改配置文件后重启jar包(java -jar命令)即可,规避了war包方式需要重新打war包重新部署的弊端

1 入门案例

1.1 环境准备

        (1) SpringBoot 3+

        (2) JAVA 17+

        (3) maven 3.6+

        (4) Tomcat 10+

1.2 编写pom.xml

        继承SpringBoot的starter

        添加web的starter依赖

<!--所有SpringBoot项目都必须继承自spring-boot-starter-parent-->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.1.4</version>
</parent>

<!--依赖不用写版本号,因为版本号已经在此项目的父项目spring-boot-starter-parent的父项目spring-boot-dependencies中用"<dependencyManagement>依赖管理"定义好了-->
<!--也可以利用maven的"就近原则",使用自定义的依赖版本-->
<dependencies>
    <!--web开发的场景启动器-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

    <!--redis场景启动器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
</dependencies>

<build>
	<plugins>
		<!--SpringBoot打包插件,让应用支持直接jar包部署-->
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

1.3 编写入口程序

        入口程序只有一个,只有这个类的所在的包及其子包才会被Spring扫描到,即默认的@ComponentScan

        也可以用@SpringBootApplication(scanBasePackages = "xyz.aboluo")@ComponentScan("xyz.aboluo")来明确要扫描的包

/**
 * 启动SpringBoot项目的主入口程序
 */
@SpringBootApplication(scanBasePackages = "xyz.aboluo")  //标记这是一个SpringBoot应用
public class MainApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext iocContext = SpringApplication.run(MainApplication.class, args);
    }
}

1.4 编写接口

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "{'code':200,'msg':'hello,world!'}";
    }
}

1.5 编写配置

        在application.properties配置文件中自定义相关配置

        配置文件的所有配置项是和某个类的对象的属性一一绑定的,这种类叫做配置属性类

                例:ServerProperties.class类绑定了Tomcat服务器有关的配置(比如server.port)

                     MultipartProperties.class类绑定了文件上传相关的配置

#自定义端口
server.port=8083
#项目地址
server.servlet.context-path=/sb

#最大文件大小
spring.servlet.multipart.max-file-size=20MB

1.6 快速部署

1.6.1 打jar包

1.6.2 部署

        在jar包所在目录,用cmd进入Window控制器,直接用java -jar jar包命令执行jar包

1.7 访问接口

2 全注解开发

SpringBoot摒弃了xml的配置方式,改为全注解驱动

2.1 常用注解

        @Configuration、@SpringBootConfiguration(与@Configuration功能一样)、@Bean、@Scope、@Component、@Controller、@Service、@Repository、@Import

        上述注解介绍可以看这篇文章

2.2 属性绑定注解

        将Spring容器中已经注册组件(Bean)的属性值配置文件的配置项的值进行绑定

2.2.1 注册组件

        可以用@Component等注解注册,也可以在Spring配置类中用@Bean注解注册

2.2.2 @ConfigurationProperties(prefix="teacher")

        将配置文件中所有teacher前缀的配置项的值有此注解的组件的属性进行绑定(需要2者同名才可以绑定)

        注解可以用在Bean类上,也可以用在Spring配置类@Bean方法

                此时通过@Component注册的组件生效,通过@Bean注册的组件也生效

2.2.3 @EnableConfigurationProperties

        用在Spirng配置类(@Configuration或@SpringBootConfiguration)上的注解,并且还是需要配合@CdonfigurationProperties一起使用

                作用1: 将对应的类注册进SpirngIOC容器(无需再写@Component或@Bean)

                作用2: 并且用配置文件中的特定前缀的配置型的值有此注解的组件的属性进行绑定

        使用原因:因为SpringBoot只扫描自己主程序所在的包,就算引入的第三方包中的类用了@ConfigurationProperties注解也无法进行属性绑定,因此此注解主要是针对导入的第三方包而存在的

@SpringBootConfiguration
@EnableConfigurationProperties({Dog.class, Cat.class})
public class SpringConfig {
}

#application.properties配置文件
dog.name=旺财
dog.age=3
dog.like=骨头


cat.name=小猫咪
cat.age=2
cat.like=猫粮

@ConfigurationProperties(prefix = "dog")
public class Dog {
    private String name;
    private Integer age;
    private String like;
}

@ConfigurationProperties(prefix = "cat")
public class Cat {
    private String name;
    private Integer age;
    private String like;
}

@SpringBootApplication(scanBasePackages = "org.example")
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext iocContext = SpringApplication.run(MainApplication.class, args);
        Dog dog = iocContext.getBean(Dog.class);
        Cat cat = iocContext.getBean(Cat.class);
        System.out.println(dog); //Dog{name='旺财', age=3, like='骨头'}
        System.out.println(cat); //Dog{name='小猫咪', age=2, like='猫粮'}
    }
}

3 整合项目流程

以整合redis为例

3.1 导依赖

3.2 找redis的自动配置类

        根据规则,某个项目的自动配置类一般是xxxxxAutoConfiguration,因此redis的配置类就是RedisAutoConfiguration

3.3 找redis的配置属性类

        根据规则,某个项目的配置属性类一般是xxxxxProperties

        从redis的自动配置类的@EnableConfigurationProperties注解可知它的配置属性类是RedisProperties

        从配置属性类的@ConfigurationProperties注解可知在自己项目的配置文件中要写的前缀是"spring.data.redis"

        从这个配置属性类中得到默认配置: 默认主机地址是"localhost",默认端口号是"6379"

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

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

相关文章

AlphaPose Pytorch 代码详解(一):predict

前言 代码地址&#xff1a;AlphaPose-Pytorch版 本文以图像 1.jpg&#xff08;854x480&#xff09;为例对整个预测过程的各个细节进行解读并记录 python demo.py --indir examples/demo --outdir examples/res --save_img1. YOLO 1.1 图像预处理 cv2读取BGR图像 img [480,…

哈希的应用--位图和布隆过滤器

哈希的应用--位图和布隆过滤器 位图1. 位图概念2. 位图在实际中的应用3. 位图相似应用给定100亿个整数&#xff0c;如何找到只出现一次的整数&#xff1f;1个文件100亿int&#xff0c;1G内存&#xff0c;如何找到不超过2次的所有整数 布隆过滤器1. 布隆过滤器的提出2. 布隆过滤…

HarmonyOS学习 -- ArkTS开发语言入门

文章目录 一、编程语言介绍二、TypeScript基础类型1. 布尔值2. 数字3. 字符串4. 数组5. 元组6. 枚举7. unknown8. void9. null 和 undefined10. 联合类型 三、TypeScript基础知识条件语句if语句switch语句 函数定义有名函数和匿名函数可选参数剩余参数箭头函数 类1. 类的定义2.…

华为认证 | 这门HCIA认证正式发布!

华为认证云计算工程师HCIA-Cloud Computing V5.5&#xff08;中文版&#xff09;自2023年9月28日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#…

机器人制作开源方案 | 齿轮传动轴偏心轮摇杆简易四足

1. 功能描述 齿轮传动轴偏心轮摇杆简易四足机器人是一种基于齿轮传动和偏心轮摇杆原理的简易四足机器人。它的设计原理通常如下&#xff1a; ① 齿轮传动&#xff1a;通过不同大小的齿轮传动&#xff0c;实现机器人四条腿的运动。通常采用轮式齿轮传动或者行星齿轮传动&#xf…

git多分支、git远程仓库、ssh方式连接远程仓库、协同开发(避免冲突)、解决协同冲突(多人在同一分支开发、 合并分支)

1 git多分支 2 git远程仓库 2.1 普通开发者&#xff0c;使用流程 3 ssh方式连接远程仓库 4 协同开发 4.1 避免冲突 4.2 协同开发 5 解决协同冲突 5.1 多人在同一分支开发 5.2 合并分支 1 git多分支 ## 命令操作分支-1 创建分支git branch dev-2 查看分支git branch-3 分…

bash一行输入,多行回显demo脚本

效果图&#xff1a; 脚本&#xff1a; #!/bin/bash # 定义一个变量&#xff0c;用来存储输入的内容 input"" # 定义一个变量&#xff0c;用来存储输入的字符 char""# 为了让read能读到空格键 IFS_store$IFS IFS# 提示内容&#xff0c;在while循环中也有&a…

SMOS数据处理,投影变换,‘EPSG:6933‘转为‘EPSG:4326‘

在处理SMOS数据时&#xff0c;遇到了读取nc数据并存为tif后&#xff0c;影像投影无法改变&#xff0c;因此全球数据无法重叠。源数据的投影为EPSG:6933&#xff0c;希望转为EPSG:4326。 解决代码。 python import os import netCDF4 as nc import numpy as np from osgeo impo…

阿里云ModelScope 是一个“模型即服务”(MaaS)平台

简介 项目地址&#xff1a;https://github.com/modelscope/modelscope/tree/master ModelScope 是一个“模型即服务”(MaaS)平台&#xff0c;旨在汇集来自AI社区的最先进的机器学习模型&#xff0c;并简化在实际应用中使用AI模型的流程。ModelScope库使开发人员能够通过丰富的…

sap 一次性供应商 供应商账户组 临时供应商 <转载>

原文链接&#xff1a;https://blog.csdn.net/xianshengsun/article/details/132620593 sap中有一次性供应商这个名词&#xff0c;一次性供应商和非一次性供应商又有什么区别呢&#xff1f; 有如何区分一次性供应商和非一次性供应商呢&#xff1f; 1 区分一次性供应商和非一次性…

狄拉克函数及其性质

狄拉克函数及其性质 狄拉克函数 近似处理 逼近近似 积分近似 狄拉克函数的性质 狄拉克函数的Hermite展开

【C++】【自用】STL六大组件:算法

文章目录 &#x1f53a;sortstable_sort&#x1f53a;reverse&#x1f53a;swap&#x1f53a;find&#x1f53a;max/min&#x1f53a;next_permutation/prev_permutation 全排列binary_searchlower_bound/upper_bound 求下界和上界set_union/set_intersection/set_difference 求…

结构体课程自我理解

目录 1. 结构体类型的声明 1.2特殊的声明方法 1.3结构体的自引用 1.4 typedef 对结构体命名 2. 结构体变量的创建和初始化 3. 结构成员访问操作符 4. 结构体内存对⻬ 4.1下面给大伙4个练习题&#xff0c;有自我解析 4.2为什么存在内存对齐 4.3修改默认对齐数 5. …

Centos中利用自带的定时器Crontab_实现mysql数据库自动备份_linux中mysql自动备份脚本---Linux运维工作笔记056

这个经常需要,怕出问题因而需要经常备份数据库,可以利用centos自带的定时器,配合脚本实现自动备份. 1.首先查看一下,这个crontab服务有没有打开: 执行:ntsysv 可以看到已经开机自启动了. 注意这个操作界面,用鼠标不行,需要用,tab按键,直接tab到确定,或取消,然后按回车回到命…

如何下不可选中的文章

背景&#xff1a; 看到了一篇比较有用的微信公众号文章&#xff08;这个文章应该是跳转到了公众号外的网站的 url 了&#xff09;&#xff0c;想留档&#xff0c;但是手机选中不了。但是这个事情作为程序员&#xff0c;怎么能束手呢。 操作&#xff1a; 1、将微信公众号链接在…

Copa:无需重建镜像,直接修补容器漏洞

关注【云原生百宝箱】公众号&#xff0c;与你一起探讨应用迁移&#xff0c;GitOps&#xff0c;二次开发&#xff0c;解决方案&#xff0c;CNCF生态。 copa 是一个使用 Go 编写的 CLI 工具&#xff0c;基于 buildkit&#xff0c;可以根据像 Trivy 这样的流行工具的漏洞扫描结果直…

LeetCode-343-整数拆分

题目描述&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 题目链接&#xff1a; LeetCode-343-整数拆分 解题思路&#xff1a; 还是根据动规五…

Centos (含Rocky-Linux) VSFTPD 简单设置

本文并非深入讨论vsftp配置的文章&#xff0c;仅以能连通为目的&#xff0c;适合那些临时需要上传点东西到服务器的场景。 一、安装 dnf -y updatednf -y install vsftpdsystemctl start vsftpdsystemctl enable vsftpd二、防火墙 开放21端口&#xff1a; firewall-cmd --zo…

利用正则表达式进行数据采集和处理

目录 一、正则表达式的概述 二、正则表达式在数据采集中的运用 1、匹配和提取数据 2、数据清洗 3、数据验证 三、Python中的re模块介绍 1、re.match()方法 2、re.search()方法 总结 正则表达式是一种强大的文本处理工具&#xff0c;它可以用于模式匹配、提取、替换等操…

Android 自定义横向时间轴

示例&#xff1a; 一、添加依赖 dependencies {******//添加RecyclerView的依赖包implementation androidx.recyclerview:recyclerview:1.2.1 } 二、页面代码 activity_main.xml: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmln…