Spring Boot心得

1.Spring Boot简介

1.1什么是Spring Boot

Spring Boot 是一个基于Java的开源框架,用于简化和加速Spring应用程序的开发过程。它通过提供默认配置和自动化配置来减少开发人员的工作量,并提供了一套强大的工具和约定,使得构建独立运行的、可部署的Spring应用程序变得更加容易。Spring Boot 提供了一种快速启动项目的方式,只需几个简单的步骤就可以创建一个可运行的Spring应用程序。它集成了许多常用的Spring框架模块,如Spring MVC、Spring Data、Spring Security等,使得开发人员能够更加专注于业务逻辑的实现,而无需过多关注底层配置和繁琐的代码编写。Spring Boot 还支持自动化配置,即根据应用程序的依赖和设置,自动配置Spring应用程序的各种组件和功能。开发人员可以通过简单的配置文件或注解来定制和覆盖这些默认配置,以满足特定的需求。

1.2Spring Boot的特点

  1. 简化配置:Spring Boot 通过提供默认配置和自动化配置来减少开发人员的工作量。它会根据应用程序的依赖和设置,自动配置Spring应用程序的各种组件和功能,开发人员无需手动编写繁琐的配置文件。

  2. 快速启动:Spring Boot 提供了一种快速启动项目的方式,只需几个简单的步骤就可以创建一个可运行的Spring应用程序。开发人员可以使用Spring Initializr或命令行工具快速生成项目骨架,并集成常用的开发工具和技术栈。

  3. 内嵌服务器:Spring Boot 内置了多种常用的服务器,如Tomcat、Jetty等,开发人员无需额外配置和部署服务器,可以直接运行Spring应用程序。

  4. 微服务支持:Spring Boot 提供了丰富的功能和工具,支持构建微服务架构。开发人员可以使用Spring Cloud组件,如服务注册与发现、负载均衡、断路器等,快速构建分布式系统。

  5. 监控和管理:Spring Boot 提供了健康检查、指标收集、日志管理等功能,方便开发人员监控和管理应用程序的运行状态。

  6. 生态系统:Spring Boot 是基于Spring框架构建的,可以无缝集成Spring的各种模块和第三方库。同时,Spring Boot还有一个活跃的社区,提供了大量的插件和扩展,方便开发人员快速集成其他技术和工具。

1.3搭建开发环境

下载、安装及配置Maven,打开Maven官网点击Download

选择apache-maven-3.9.5-bin.zip

Maven不需要安装,把他解压在你所需的目录下,编辑环境变量。

打开解压的目录下复制目录路径

打开系统信息的高级设置点击环境变量,进入系统变量的Path

将复制的路径添加到变量里

检查安装情况,点击开始在搜索框输入“cmd”命令,接着输入mvn - v,若出现版本信息就说明安装成功。 

配置Maven国内仓库

进入 Maven 安装目录下的 conf 目录,打开 settings.xml 文件,找到<miror></mitor>标签,以设置阿里云镜像仓库例,添加如下代码。

2.Spring boot核心配置

  1. application.properties/application.yml:Spring Boot使用这些配置文件来配置应用程序的属性。你可以在这些文件中指定数据库连接信息、服务器端口、日志级别等等。

  2. @Configuration注解:使用@Configuration注解的类被视为配置类,Spring Boot会在启动时自动加载并应用其中的配置。你可以在配置类中定义Bean、配置数据源、设置拦截器等。

  3. @EnableAutoConfiguration注解:使用@EnableAutoConfiguration注解可以启用Spring Boot的自动配置。它会根据项目的依赖自动配置应用程序的各种组件,如数据源、消息队列、Web MVC等。你也可以使用@EnableAutoConfiguration(exclude = {...})排除某些自动配置。

  4. @ComponentScan注解:使用@ComponentScan注解可以指定Spring Boot应用程序的组件扫描路径,告诉Spring Boot在哪里寻找Spring组件。

  5. @Value注解:使用@Value注解可以注入配置文件中的属性值。你可以在Spring组件中使用@Value("${property.name}")的方式获取属性值,方便在代码中使用配置的属性。

  6. 外部配置文件:除了application.properties/application.yml,Spring Boot还支持外部的配置文件。你可以通过指定--spring.config.name和--spring.config.location参数来加载自定义的配置文件。

如要配置Web服务访问的端口和上下文路径,基本配置如下

 在pom.xml 文件中添加一个依赖——配置文件处理器,则在书写配置文件时会有提示,代码如下。

 3.数据库的操作

  1. Spring Data JPA:Spring Data JPA是Spring提供的一个简化数据库访问的框架。它可以通过定义实体类和接口的方式,自动生成SQL语句,并提供了一系列的CRUD方法。使用Spring Data JPA需要在pom.xml中添加相应的依赖,并在实体类上使用注解进行配置。具体的使用方式可以参考Spring Data JPA的官方文档。

  2. MyBatis:MyBatis是一个优秀的持久层框架,可以通过XML或注解的方式来进行数据库操作。在Spring Boot中使用MyBatis需要添加相应的依赖,并配置MyBatis的数据源和mapper扫描路径。同时,你需要编写Mapper接口和对应的SQL语句。具体的使用方式可以参考MyBatis的官方文档。

  3. JdbcTemplate:JdbcTemplate是Spring提供的一个轻量级的数据库访问工具,通过调用它提供的方法来执行SQL语句。使用JdbcTemplate需要在pom.xml中添加相应的依赖,并在代码中创建JdbcTemplate对象进行数据库操作。你可以使用JdbcTemplate提供的方法执行增删改查操作。具体的使用方式可以参考Spring的官方文档。

3.1链接数据库

数据库链接

3.2任务实现,某公司资产管理系统的角色管理

任务实现

4.Spring Boot数据缓存管理

4.1缓存简介

 SpringBoot 开发项目中,Spring Boot透明地向应用程序中添加缓存,将缓存应用于方法,在方法执行前检查缓存中是否有可用的数据。这样可以减少方法执行的次数,同时提高响应的速度。缓存的开启通过@EnableCaching注解来实现,缓存开启后,Spring Boot会自动处理好缓存的基本配置。
当调用一个缓存方法时,会把该方法的参数和返回结果作为键值对保存在缓存中,下次用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。
所以在使用 SpringCache 时,要保证在缓存的方法和方法参数相同时返回相同的结果。

4.2缓存注解

在Spring Boot中,你可以使用注解来开启缓存功能。主要有以下几个注解:

  1. @EnableCaching:在启动类上添加该注解,开启缓存功能。

  2. @Cacheable:标记在方法上,表示该方法的返回值会被缓存。当再次调用该方法时,如果缓存中已经存在结果,就直接返回缓存中的数据,不会执行方法体。

  3. @CachePut:标记在方法上,表示该方法的返回值会被缓存。每次调用该方法,都会执行方法体,并将返回值存入缓存。

  4. @CacheEvict:标记在方法上,表示该方法会从缓存中移除指定的数据。

  5. @Caching:可以同时使用多个缓存注解,对缓存的操作进行组合。

除了以上注解,Spring Boot还提供了对多种缓存管理器的支持,包括EhCache、Redis、Caffeine等。你可以选择适合你应用程序的缓存管理器,并进行相应的配置。

在配置方面,你可以在application.properties或application.yml文件中配置缓存相关的属性,如缓存的名称、过期时间等。你还可以通过自定义缓存配置类,对缓存的行为进行更详细的配置。

5.Spring Boot消息队列

Spring Boot提供了与消息队列集成的功能,可以方便地实现异步消息的发送和接收。在Spring Boot中,最常用的消息队列实现是使用Apache Kafka和RabbitMQ。

  1. Apache Kafka:Kafka是一个高吞吐量、分布式的发布-订阅消息系统。通过使用Kafka,可以实现消息的持久化、可靠性传输和水平扩展等功能。在Spring Boot中,可以使用spring-kafka库来集成Kafka,使用KafkaTemplate发送消息,使用@KafkaListener注解接收消息。

  2. RabbitMQ:RabbitMQ是一个开源的AMQP(Advanced Message Queuing Protocol)消息队列系统。它支持多种消息传输模式,包括点对点、发布-订阅、RPC等。在Spring Boot中,可以使用spring-amqp库来集成RabbitMQ,使用RabbitTemplate发送消息,使用@RabbitListener注解接收消息。

使用消息队列可以实现系统的解耦、异步处理、削峰填谷等功能,适用于需要解耦和异步处理的场景,例如日志处理、异步通知、任务调度等。

除了Kafka和RabbitMQ,Spring Boot还支持其他消息队列的集成,如ActiveMQ、Redis消息队列等,可以根据具体需求选择适合的消息队列实现。

5.1消息服务

Spring Boot提供了多种方式来实现消息服务,其中最常用的方式是使用Spring Integration和Spring Cloud Stream。这两种方式都可以方便地集成消息中间件,并且提供了统一的编程模型来发送和接收消息。

  1. Spring Integration:Spring Integration是一个轻量级的集成框架,可以将各种系统、应用和协议进行无缝集成。它提供了丰富的消息处理组件,如通道、适配器、过滤器、转换器等,可以方便地实现消息的发送、接收和处理。通过集成消息中间件适配器,可以将Spring Integration与消息中间件(如ActiveMQ、RabbitMQ)集成在一起,实现消息的传输和处理。

  2. Spring Cloud Stream:Spring Cloud Stream是在Spring Integration基础上构建的一套用于构建消息驱动的微服务的框架。它提供了一种声明式的方式来定义和绑定消息通道,将消息的发送和接收与具体的消息中间件解耦。通过Spring Cloud Stream,可以方便地切换和集成不同的消息中间件,如Kafka、RabbitMQ等。

5.2常用的信息中间件

  1. RabbitMQ:RabbitMQ是一个开源的消息代理和队列服务器,它支持多种消息协议,如AMQP、MQTT等。Spring Boot提供了对RabbitMQ的自动配置和集成支持。

  2. Apache Kafka:Kafka是一个分布式流处理平台,具有高吞吐量、可扩展性和持久性等特点。Spring Boot提供了对Kafka的自动配置和集成支持。

  3. ActiveMQ:ActiveMQ是一个开源的消息中间件,支持JMS(Java Message Service)规范。Spring Boot提供了对ActiveMQ的自动配置和集成支持。

  4. Redis:Redis是一个内存数据存储系统,也可以用作消息中间件。Spring Boot提供了对Redis的自动配置和集成支持,可以使用Redis作为消息队列。

  5. Apache Pulsar:Pulsar是一个开源的分布式消息和流平台,具有高性能、多租户和可扩展性等特点。Spring Boot可以通过集成Pulsar客户端库来使用Pulsar作为消息中间件。

6.Spring Boot安全机制

  1. 基于角色的访问控制:Spring Security是Spring Boot的核心安全框架,可以实现基于角色的访问控制。通过配置角色和权限,可以限制用户对应用程序资源的访问。

  2. 表单认证:Spring Security提供了基于表单的认证机制,用户可以通过登录页面输入用户名和密码进行认证。可以自定义登录页面和认证逻辑,并可以集成第三方认证服务。

  3. OAuth 2.0:Spring Security还支持OAuth 2.0协议,可以实现基于令牌的认证和授权。可以使用Spring Security OAuth模块来集成OAuth 2.0的功能。

  4. JWT(JSON Web Token):JWT是一种基于JSON的安全令牌,Spring Security可以使用JWT来实现无状态的认证和授权。JWT可以包含用户信息和权限等数据,可以减轻身份认证的服务器负担。

  5. HTTPS:Spring Boot提供了配置HTTPS的能力,可以通过配置SSL证书来实现安全的传输。可以使用内置的Tomcat或Jetty服务器,或者使用外部的反向代理服务器来实现HTTPS。

  6. 安全事件和日志:Spring Security提供了安全事件和日志记录的功能,可以记录各种安全相关的事件,如登录成功、访问拒绝等。可以通过监听这些事件,并进行相应的处理和记录。

6.1什么是JWT

  1. 头部(Header):头部通常由两部分组成,令牌的类型(即JWT)和所使用的签名算法(如HMAC SHA256或RSA等)。

  2. 载荷(Payload):载荷是JWT的主要内容,包含了一些声明(Claims),用于描述令牌的相关信息。它可以包含用户的身份信息、权限等附加数据。

  3. 签名(Signature):签名是对头部和载荷进行签名的结果,以确保令牌的完整性和真实性。签名通常使用密钥来生成,只有持有密钥的人才能验证签名的有效性。

JWT的优点是简洁、自包含和可扩展。由于JWT使用JSON格式存储信息,因此可以轻松地在不同的平台和语言之间传递。JWT还可以通过添加自定义声明来扩展其功能,并支持在令牌中添加额外的元数据。

在使用JWT时,服务器会生成一个JWT并将其发送给客户端,客户端随后将该令牌包含在请求的头部或其他位置中进行传递。服务器可以验证令牌的有效性,并根据令牌中的信息来授权和处理请求。

JWT常用于身份验证和授权方面,特别适用于分布式系统和前后端分离的应用程序。通过使用JWT,可以在不依赖会话状态的情况下实现可靠的身份验证和授权机制。

6.2JWT认证流程

  1. 用户登录:用户提供用户名和密码进行登录验证。

  2. 服务器验证:服务器验证用户提供的用户名和密码是否正确,如果验证通过,则生成一个JWT。

  3. JWT生成:服务器使用私钥对JWT的头部和载荷进行签名,生成签名后的JWT。

  4. JWT返回:服务器将生成的JWT返回给客户端,通常是作为响应的一部分,可以放在HTTP的响应头部、响应正文或者Cookie中。

  5. 客户端存储:客户端接收到JWT后,通常会将其存储在本地,例如存储在浏览器的localStorage或者Cookie中。

  6. 请求发送:客户端在后续的请求中,将JWT作为身份验证的凭证,放在请求的头部、请求参数或者请求正文中。

  7. 服务器验证:服务器接收到请求后,从请求中提取JWT,并使用公钥验证JWT的签名是否有效和完整。

  8. 身份认证:服务器根据JWT中的载荷信息,判断用户的身份和权限,如果验证通过,则处理请求;否则,返回相应的错误信息。

JWT的优点之一是无状态性,因此服务器不需要在自身存储用户的状态信息,可以通过验证JWT的签名来验证用户的有效性。这样的设计使得JWT非常适合在分布式系统和微服务架构中使用,同时也减轻了服务器的负担。

7.学习Spring Boot后的心得

7.1自我心得

学习Spring Boot是我在编程学习过程中的一大收获。作为一个初学者,我发现Spring Boot的学习曲线相对较低,上手比较容易。它提供了自动配置和约定优于配置的原则,使得开发者可以快速搭建和部署应用程序,而无需过多关注繁琐的配置细节。

在学习Spring Boot的过程中,我发现它的文档和教程非常丰富,这让我能够快速理解和掌握它的核心概念和用法。同时,Spring Boot的社区也非常活跃,开发者可以在社区中交流和分享经验,获得及时的帮助和反馈。

Spring Boot提供了丰富的功能和组件,以满足不同应用场景的需求。它集成了Spring Data JPA、MyBatis等数据库操作框架,使得数据库的操作变得更加简单。同时,它还提供了缓存、消息队列、安全认证等功能的支持,方便开发者快速集成这些功能到应用程序中。

在实际应用开发中,我深刻体会到了Spring Boot的优势。它的模块化设计和松耦合的架构使得应用程序更加易于扩展和维护。同时,Spring Boot提供了强大的测试支持,可以方便地编写单元测试和集成测试,保证应用程序的质量和稳定性。

此外,Spring Boot的生态系统也非常强大,有很多优秀的开源项目和框架可以与之集成。例如,Spring Cloud提供了丰富的微服务组件,可以方便地构建和管理分布式系统。这些项目的存在,为我们提供了更多的选择和灵活性。

总的来说,学习Spring Boot让我对Java应用程序的开发有了全新的认识。它的简洁和强大的功能让开发过程更加高效和愉快。我相信在未来的开发工作中,Spring Boot将会是我首选的框架之一。

 7.2对代码的心得

学习和使用Spring Boot给我带来了很多的收获和体会。首先,Spring Boot极大地简化了Java应用程序的开发过程,减少了繁琐的配置和重复的代码。通过自动配置和约定优于配置的原则,我们可以快速搭建一个基本的应用程序框架,省去了很多繁杂的工作。这使得我能够更专注于业务逻辑的实现,提高了开发效率。

其次,Spring Boot集成了丰富的功能和组件,如数据库操作框架、缓存和消息队列等。这些功能的集成让我在开发过程中更加方便地使用这些工具,不需要再手动配置和引入第三方库。例如,使用Spring Data JPA可以简化数据库操作的编写,减少了SQL语句的编写量。使用Spring Cache可以方便地实现缓存功能,提高了系统的性能。这些功能的集成让我能够更加专注于业务逻辑的实现,而不需要花费过多的精力在底层的技术细节上。

另外,Spring Boot拥有一个良好的生态系统和社区支持。在学习和使用Spring Boot的过程中,我发现有很多优秀的开源项目和文档资源可以参考。通过查阅文档和参与社区讨论,我能够快速解决遇到的问题,并且学习到很多其他开发者的经验和技巧。这个庞大的社区给我提供了很多学习和成长的机会。

总的来说,学习Spring Boot让我对Java应用程序开发有了全新的认识。它的简洁、高效和功能丰富给我带来了很多的便利和快乐。通过学习和使用Spring Boot,我提高了开发效率,同时也加深了对Java技术栈的理解。我相信在今后的工作中,Spring Boot会成为我不可或缺的开发工具之一。

猜你喜欢

转载自blog.csdn.net/2301_78093624/article/details/134238929