什么是Spring Boot 应用开发?
一、引言
在当今的软件开发领域,Java 依然占据着重要的地位,而 Spring Boot 作为 Java 生态系统中极具影响力的框架,极大地简化了企业级应用的开发流程,提升了开发效率和应用的可维护性。它基于 Spring 框架构建,通过约定优于配置的原则,减少了繁琐的样板代码,让开发者能够快速搭建出功能强大、易于扩展的应用程序,无论是构建小型的微服务还是大型的企业级应用系统,Spring Boot 都提供了全面而便捷的解决方案,涵盖了从后端数据处理、业务逻辑实现到前端交互接口提供等各个方面,成为了众多开发者的首选框架之一。
二、Spring Boot 基础
(一)Spring Boot 概述
Spring Boot 是由 Pivotal 团队开发的一个开源框架,旨在简化 Spring 应用的初始搭建以及开发过程。它利用自动配置机制,根据项目依赖自动配置 Spring 框架,使得开发者能够快速启动项目,避免了大量繁琐的配置工作。例如,当在项目中引入了spring-boot-starter-web
依赖,Spring Boot 会自动配置 Tomcat 服务器、DispatcherServlet
等 Web 开发所需的组件,开发者可以立即专注于业务逻辑的编写,而无需关心这些基础组件的复杂配置。
(二)核心特性
- 自动配置:通过分析项目的类路径和配置,Spring Boot 能够自动配置众多常用的 Spring 组件,如数据库连接池、Spring MVC 等,减少了手动配置的工作量和出错的可能性。例如,对于常见的数据库连接,只需在配置文件中提供数据库的基本信息(如 URL、用户名、密码),Spring Boot 就能自动配置合适的连接池,并将其注入到数据访问层的组件中,实现与数据库的高效连接和交互。
- 起步依赖:提供了一系列的起步依赖,这些依赖将相关的库组合在一起,方便开发者快速引入所需的功能。例如,
spring-boot-starter-data-jpa
起步依赖会引入 JPA(Java Persistence API)相关的库以及 Hibernate 等实现,使得在项目中进行数据库持久化操作变得简单快捷,开发者无需手动管理各个依赖之间的版本兼容性问题,提高了开发效率和项目的稳定性。 - Actuator 端点:Actuator 为 Spring Boot 应用提供了生产级的监控和管理功能,通过一系列的 HTTP 端点,开发者可以获取应用的运行时信息,如健康状况、内存使用情况、线程信息等,还可以进行一些管理操作,如动态刷新配置、关闭应用等,方便在生产环境中对应用进行运维和故障排查,确保应用的稳定运行和高效性能。
三、环境搭建
(一)安装 Java 开发工具包(JDK)
首先需要安装合适版本的 JDK,推荐使用长期支持版本(LTS),如 Java 8 或更高版本。从 Oracle 官方网站或 OpenJDK 项目下载对应操作系统的 JDK 安装包,按照安装向导进行安装,安装完成后设置好系统环境变量JAVA_HOME
,并将%JAVA_HOME%in
添加到系统的PATH
环境变量中,以便在命令行中能够方便地使用java
和javac
等命令,确保 Java 开发环境的正常运行。
(二)安装集成开发环境(IDE)
选择一款适合的 IDE,如 IntelliJ IDEA 或 Eclipse 等。以 IntelliJ IDEA 为例,从其官方网站下载社区版或旗舰版安装包,进行安装。安装完成后,打开 IDE,进行基本的配置,如设置字体、主题、代码风格等,使其符合个人的开发习惯。同时,安装必要的插件,如 Spring Assistant 插件,该插件可以帮助开发者更方便地创建和管理 Spring Boot 项目,提供代码自动完成、配置文件提示等功能,提高开发效率。
(三)创建 Spring Boot 项目
在 IDE 中创建 Spring Boot 项目,一般可以通过项目创建向导来完成。例如,在 IntelliJ IDEA 中,选择 “New Project”,然后选择 “Spring Initializr”,填写项目的基本信息,如 Group、Artifact、依赖等,选择需要的 Spring Boot 起步依赖,如Web
、JPA
、MySQL Driver
等,根据项目的具体需求进行选择,然后点击 “Finish” 按钮,IDE 会自动下载所需的依赖,并生成一个基本的 Spring Boot 项目结构,包括主类、配置文件、测试类等,开发者可以在此基础上开始编写业务代码,快速启动项目开发。
四、基础应用开发
(一)创建 RESTful 接口
使用 Spring Boot 的@RestController
注解创建 RESTful 接口,该注解结合了@Controller
和@ResponseBody
的功能,使得方法的返回值能够直接转换为 JSON 等格式响应给客户端。例如:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";}
}
在上述代码中,@GetMapping
注解指定了该方法处理 HTTP GET 请求,路径为/hello
,当客户端访问该路径时,会返回字符串"Hello, Spring Boot!"
,通过这种方式,可以快速构建出简单的 RESTful API,方便前后端分离开发中的数据交互,为前端提供数据接口支持,实现应用的业务逻辑对外暴露和交互。
(二)数据持久化与数据库连接
通过引入spring-boot-starter-data-jpa
依赖,结合数据库连接配置,实现数据持久化操作。在配置文件(application.properties
或application.yml
)中配置数据库连接信息,例如对于 MySQL 数据库:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
然后创建实体类,使用 JPA 的注解定义实体与数据库表的映射关系,如@Entity
、@Table
、@Column
等,创建数据访问接口继承JpaRepository
,即可实现基本的数据库操作,如findAll
、save
、findById
等,无需编写大量的 SQL 查询语句,简化了数据库访问层的开发,使得开发者能够高效地与数据库进行交互,实现数据的存储、查询和更新,为应用的业务逻辑提供数据支持,确保数据的持久化和高效管理。
(三)使用 Thymeleaf 进行模板引擎渲染
引入spring-boot-starter-thymeleaf
依赖,在resources/templates
目录下创建 HTML 模板文件,使用 Thymeleaf 的语法在模板中进行动态数据绑定和页面渲染。例如:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Spring Boot Thymeleaf Example</title>
</head>
<body><h1 th:text="${message}">Welcome!</h1>
</body>
</html>
在控制器中,将数据模型添加到视图中:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class ThymeleafController {@GetMapping("/thymeleaf")public String thymeleafPage(Model model) {model.addAttribute("message", "Hello from Thymeleaf!");return "thymeleaf";}
}
当访问/thymeleaf
路径时,Thymeleaf 会根据模板和数据模型渲染出最终的 HTML 页面,将动态数据展示给用户,实现服务器端的页面渲染,适用于一些需要在服务器端生成完整 HTML 页面的场景,如传统的 Web 应用页面展示,为用户提供丰富的交互体验和页面展示效果,结合后端的数据处理和业务逻辑,构建完整的 Web 应用前端界面。
五、配置与高级特性
(一)配置文件的使用与优先级
Spring Boot 支持多种格式的配置文件,如properties
、yml
(或yaml
)等,配置文件可以用于设置应用的各种属性,如数据库连接信息、服务器端口、日志级别等。配置文件的加载顺序和优先级如下:
- 命令行参数:通过
java -jar app.jar --server.port=8081
等方式在命令行中指定的参数具有最高优先级,会覆盖其他配置文件中的相同配置。 SPRING_APPLICATION_JSON
环境变量:以 JSON 格式设置的环境变量,其中的配置属性会覆盖后续配置源中的相同属性。java:comp/env
中的 JNDI 属性:如果应用运行在 Java EE 容器中,通过 JNDI 设置的属性会被读取,其优先级高于常规的配置文件。- 系统环境变量:操作系统的环境变量,如
PORT
、DB_URL
等,Spring Boot 会自动将其转换为对应的配置属性,例如server.port
、spring.datasource.url
等,环境变量中的配置可以方便地在不同的部署环境中进行调整,而无需修改代码和配置文件。 RandomValuePropertySource
:用于生成随机值的配置源,例如随机的端口号、密码等,可以在开发和测试环境中避免配置冲突,确保应用的灵活性和安全性。- 应用外部的配置文件:位于应用外部的
application.properties
或application.yml
文件,如在项目根目录下的config
文件夹中,或者在运行时指定的其他路径下的配置文件,这些外部配置文件可以方便地在不同的部署环境中进行覆盖和定制,实现应用的灵活配置。 - 应用内部的配置文件:位于
src/main/resources
目录下的application.properties
或application.yml
文件,这是最常见的配置文件位置,其中的配置为应用的默认配置,在没有其他更高优先级的配置时生效。 @Configuration
类中的@PropertySource
注解:通过在@Configuration
类中使用@PropertySource
注解指定的配置文件,其优先级低于上述的配置源,但可以方便地将特定的配置文件引入到应用的配置体系中,实现配置的模块化管理。- 默认属性:Spring Boot 提供的默认属性值,这些属性值在没有任何其他配置的情况下生效,确保应用在没有显式配置时也能有合理的默认行为,例如默认的服务器端口为
8080
,默认的日志级别为INFO
等。
开发者可以根据不同的应用场景和需求,合理利用这些配置源的优先级,灵活地配置应用的各项属性,实现应用在不同环境下的定制化部署和运行,例如在开发环境中使用较低的日志级别和随机的端口号,在生产环境中使用稳定的配置和更高的安全级别,确保应用的稳定运行和高效性能。
(二)多环境配置(如开发、测试、生产)
Spring Boot 支持通过配置文件的命名规范实现多环境配置,例如创建application-dev.properties
、application-test.properties
、application-prod.properties
等配置文件,分别对应开发、测试和生产环境。在application.properties
或application.yml
文件中通过spring.profiles.active
属性指定当前激活的环境配置,如spring.profiles.active=dev
表示激活开发环境配置。
在不同环境的配置文件中,可以设置不同的数据库连接信息、服务器端口、日志级别等属性,以适应不同环境的需求。例如,在开发环境中,可能使用本地的开发数据库,服务器端口设置为8081
,日志级别为DEBUG
,以便于开发调试;在测试环境中,使用专门的测试数据库,端口为8082
,日志级别为INFO
,进行系统的集成测试;在生产环境中,连接生产数据库,使用标准的端口(如80
或443
),日志级别为WARN
,确保系统的稳定运行和安全性,同时优化性能配置,如调整数据库连接池的大小等,通过这种方式,实现了应用在不同环境下的差异化配置,提高了开发效率和应用的可维护性,方便在不同阶段的开发、测试和部署过程中快速切换环境配置,确保应用的正常运行和性能优化。
(三)缓存机制的应用
Spring Boot 提供了对缓存的支持,可以方便地集成各种缓存实现,如 Ehcache、Redis 等,通过在方法上使用@Cacheable
、@CachePut
、@CacheEvict
等注解实现缓存功能。例如,使用@Cacheable
注解可以缓存方法的返回结果,下次调用该方法时,如果缓存中存在相应的结果,则直接从缓存中获取,而无需再次执行方法体中的业务逻辑,提高应用的性能。
首先,在项目中引入相应的缓存依赖,如spring-boot-starter-cache
和spring-boot-starter-data-redis
(如果使用 Redis 作为缓存),然后在配置文件中配置缓存相关的属性,如 Redis 的连接信息等。在业务方法上添加缓存注解,例如:
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class UserService {@Cacheable(cacheNames = "users", key = "#id")public User getUserById(Long id) {// 从数据库或其他数据源获取用户信息的逻辑return userRepository.findById(id).orElse(null);}
}
在上述代码中,getUserById
方法的结果会被缓存到名为"users"
的缓存中,缓存的键为方法参数id
,当再次调用该方法且传入相同的id
时,会直接从缓存中获取用户信息,减少了数据库查询等耗时操作,提高了数据获取的效率,尤其在处理频繁读取的数据时,缓存机制能够显著提升应用的响应速度和性能,优化用户体验,同时也减轻了数据源的压力,提高了系统的整体稳定性和可扩展性。
六、安全与认证授权
(一)Spring Security 集成
引入spring-boot-starter-security
依赖,Spring Boot 会自动配置基本的安全机制,包括默认的用户认证和访问控制。可以通过继承WebSecurityConfigurerAdapter
类来定制安全配置,例如:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().logoutSuccessUrl("/public/home").permitAll();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password(passwordEncoder().encode("password")).roles("USER").and().withUser("admin").password(passwordEncoder().encode("adminpassword")).roles("ADMIN");}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}
在上述配置中,定义了哪些 URL 路径需要认证访问,哪些可以公开访问,配置了自定义的登录页面和登录逻辑,以及用户的认证信息(这里使用内存中的用户信息作为示例,实际应用中通常会从数据库或其他身份验证服务获取用户信息),同时使用BCryptPasswordEncoder
对用户密码进行加密存储,提高安全性,确保应用的访问安全,防止未经授权的用户访问敏感资源,保护应用的数据和业务逻辑的安全,满足企业级应用的安全需求,为用户提供安全可靠的应用环境,防止数据泄露和恶意攻击等安全问题。
(二)基于角色的访问控制(RBAC)
在 Spring Security 的基础上,实现基于角色的访问控制,通过在方法或 URL 路径上使用@PreAuthorize
、@PostAuthorize
等注解来限制不同角色的用户对资源的访问权限。例如:
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/admin")
public class AdminController {@PreAuthorize("hasRole('ADMIN')")@GetMapping("/dashboard")public String adminDashboard() {return "admin/dashboard";}
}
在上述代码中,只有具有"ADMIN"
角色的用户才能访问/admin/dashboard
路径,否则会返回403 Forbidden
错误,通过这种方式,可以精细地控制不同用户角色对应用资源的访问权限,实现权限的最小化分配,提高应用的安全性和数据的保密性,确保每个用户只能访问其被授权的功能和数据,防止权限滥用和数据泄露,满足企业级应用中复杂的权限管理需求,为不同角色的用户提供定制化的应用功能和数据访问权限,增强应用的安全性和可靠性。
相关文章:
什么是Spring Boot 应用开发?
一、引言 在当今的软件开发领域,Java 依然占据着重要的地位,而 Spring Boot 作为 Java 生态系统中极具影响力的框架,极大地简化了企业级应用的开发流程,提升了开发效率和应用的可维护性。它基于 Spring 框架构建,通过…...
选择saas 还是源码主要考虑
公司业务规模:小型企业可能会发现SaaS提供的即用型解决方案更符合其需求,而大型企业可能需要源码以实现更高的定制性和控制权。 公司技术专长:缺乏技术团队的企业可能会倾向于使用SaaS,而那些拥有强大IT部门的企业可能更适合管理…...
【JAVA 基础 第(19)课】Hashtable 类用法和注意细节,是Map接口的实现类
Map接口:存放的是具有映射关系的键值对,键映射到值,键必须是唯一的 Hashtable 类,Map接口的实现类,键和值都不能为nullHashtable 是同步的,是线程安全的 public class MapTest {public static void main(String[] arg…...
AI时代下 | 通义灵码冲刺备战求职季
AI时代下 | 通义灵码冲刺备战求职季 什么是通义灵码使用智能编程助手备战求职靠谱吗体验心得 AI时代下,备战求职季有了不一样的方法,使用通义灵码冲刺备战求职季,会有什么样的体验? 什么是通义灵码 在开始话题之前,首…...
如何将 session 共享存储到 redis 中
文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…...
智能科技与共情能力加持,哈曼重新定义驾乘体验
2025年1月6日,拉斯维加斯,2025年国际消费电子展——想象一下,当您步入一辆汽车,它不仅能响应您的指令,更能理解您的需求、适应您的偏好,并为您创造一个独特且专属的交互环境。作为汽车科技领域的知名企业和…...
第4章 Kafka核心API——Kafka客户端操作
Kafka客户端操作 一. 客户端操作1. AdminClient API 一. 客户端操作 1. AdminClient API...
Debian 设定 tomcat 定时重启
目录 背景 过程记录 1、编辑sh文件,完成重启功能 2、设置sh的可执行权限 编辑 3、设置定时任务 背景 在Debian 12系统中,原本部署了两个tomcat,结果总是遇到CPU飙升到影响应用正常使用的程度,找了很久原因还是没有找到。 …...
mysql8.0 重要指标参数介绍
MySQL 8.0 引入了许多新的功能和优化,针对性能、可扩展性、可靠性以及安全性方面做出了显著改进。为了确保 MySQL 的高效运行,了解和配置 MySQL 的一些关键指标参数非常重要。以下是 MySQL 8.0 中的一些重要参数和指标,帮助你优化数据库性能。…...
SpringMVC (2)
目录 1. RequestMapping 注解介绍 2. RequestMapping 使用 3. RequestMapping与请求方式 3.1 RequestMapping 支持Get和Post类型的请求 3.2 RequestMapping 指定接收某种请求 3.3 GetMapping和PostMapping 4. 传参 4.1 通过查询字符串传参 4.2 在 Body 中传参 4.2.1 …...
【全面解析】深入解析 TCP/IP 协议:网络通信的基石
深入解析 TCP/IP 协议:网络通信的基石 导语 你是否曾好奇,现代互联网是如何实现全球设备之间的高速、稳定和可靠通信的?无论是浏览网页、发送电子邮件,还是进行视频通话,背后都离不开 TCP/IP 协议 的支撑。作为互联网…...
图数据库 | 19、高可用分布式设计(下)
相信大家对分布式系统设计与实现的复杂性已经有了一定的了解,本篇文章对分布式图数据库系统中最复杂的一类系统架构设计进行探索,即水平分布式图数据库系统(这个挑战也可以泛化为水平分布式图数据仓库、图湖泊、图中台或任何其他依赖图存储、…...
【2024年华为OD机试】 (C卷,200分)- 反射计数(Java JS PythonC/C++)
一、问题描述 题目解析 题目描述 给定一个包含 0 和 1 的二维矩阵,一个物体从给定的初始位置出发,在给定的速度下进行移动。遇到矩阵的边缘时会发生镜面反射。无论物体经过 0 还是 1,都不影响其速度。请计算并给出经过 t 时间单位后&#…...
【微服务】SpringCloud 1-9章
1从Boot和Cloud版本选型开始说起 1.1Springboot版本选择 1.1.1git源码地址 https://github.com/spring-projects/spring-boot/releases/ 1.1.2官网看Boot版本 1.1.3SpringBoot3.0崛起 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes …...
Jmeter进行http接口并发测试
目录: 1、Jmeter设置(1)设置请求并发数(2)设置请求地址以及参数(3)添加结果数 2、启动看结果 1、Jmeter设置 (1)设置请求并发数 (2)设置请求地址…...
JavaScript语言的数据结构
JavaScript中的数据结构 引言 在编程的世界里,数据结构是处理和组织数据的重要方式。数据结构的选择往往直接影响到程序的性能和可维护性。JavaScript作为一门广泛使用的编程语言,在数据结构的设计和使用上也有其独特的特点。本文将深入探讨JavaScript…...
【数据分享】1929-2024年全球站点的逐日平均气温数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…...
DETRs with Collaborative Hybrid Assignments Training论文阅读与代码
关键词:协作混合分配训练 【目标检测】Co-DETR:ATSS+Faster RCNN+DETR协作的先进检测器(ICCV 2023)-CSDN博客 摘要: 在这篇论文中,作者观察到在DETR中将过少的 Query 分配为正样本,采用一对一的集合匹配,会导致对编码器输出的监督稀疏,严重损害编码器的区分特征学习…...
某国际大型超市电商销售数据分析和可视化
完整源码项目包获取→点击文章末尾名片! 本作品将从人、货、场三个维度,即客户维度、产品维度、区域维度(补充时间维度与其他维度)对某国际大型超市的销售情况进行数据分析和可视化报告展示,从而为该超市在弄清用户消费…...
码云gitee 新建仓库 添加公钥
码云gitee 新建仓库 添加公钥 文章目录 码云gitee 新建仓库 添加公钥新建仓库生成公钥管理个人公钥安全验证 码云这个网站是一个代码托管平台,在国内可以无限制的使用,在这个网站上,也可以搜索到一些github上面的内容。进入这个网站ÿ…...
SQL 基础教程 - SQL SELECT INTO 语句
通过 SQL,您可以从一个表复制信息到另一个表。 SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。 SQL SELECT INTO 语句 SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。 注意: MySQL 数据…...
《leetcode-runner》如何手搓一个debug调试器——指令系统
前文: 《leetcode-runner》如何手搓一个debug调试器——引言 《leetcode-runner》如何手搓一个debug调试器——架构 文章目录 什么是指令系统指令的组成部分leetcode-runner支持哪些指令如何解析用户输入的命令行指令识别流程 仓库地址:leetcode-runner …...
基于预共享密钥的IPsec实验
一、实验目的 (1)了解IPsec的原理和协议运行机制; (2)掌握IPsec身份认证的预共享密钥的配置; (3)掌握用Wireshark工具抓包分析IPsec数据包格式和协议流程。 二、实验设备与环境 &…...
Golang Gin系列-2:搭建Gin 框架环境
开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中,我们将引导你完成安装Go编程语言和Gin框架的过程,Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中,本指南是高效而强大的web开发路线图。 安装…...
R语言绘图
多组火山图 数据准备: 将CSV文件同一在一个路径下,用代码合并 确保文件列名正确 library(fs) library(dplyr) library(tidyr) library(stringr) library(ggplot2) library(ggfun) library(ggrepel)# 获取文件列表 file_paths <- dir_ls(path &quo…...
Linux《Linux简介与环境的搭建》
在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了,现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用,所以Linxu也是我们学习编程的重要环节,在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…...
.Net Core webapi 实现JWT认证
文章目录 需求准备创建JWT配置创建JWTService注册JWT创建中间件读取jwt的token在需要的接口上添加属性启动认证启动swagger的授权认证使用 需求 实现一个记录某个用户所有操作的功能 准备 创建你的webapi项目从nuget下载安装JWT资源包根据你的项目使用.net版本下载对应的jwt…...
SDL2:Android APP编译使用 -- SDL2多媒体库使用音频实例
SDL2:Android APP编译使用 3. SDL2:Android APP编译使用3.1 Android Studio环境准备:3.2 构建Android APP(1)方式一:快速构建APK工程(2)方式二:自定义APK工程(…...
gitignore忽略已经提交过的
已经在.gitignore文件中添加了过滤规则来忽略bin和obj等文件夹,但这些文件夹仍然出现在提交中,可能是因为这些文件夹在添加.gitignore规则之前已经被提交到Git仓库中了。要解决这个问题,您需要从Git的索引中移除这些文件夹,并确保…...
Visual Studio2019调试DLL
1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后,按F5启动调试。弹出选择注入的exe的界面之后,使用代码注入器注入步骤2中生成的dllÿ…...
电力场景红外测温图像绝缘套管分割数据集labelme格式2436张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2436 标注数量(json文件个数):2436 标注类别数:1 标注类别名称:["arrester"] 每个类别标注的框数&am…...
RV1126+FFMPEG推流项目(7)AI音频模块编码流程
一、AI 模块和外设麦克风的关系 AI 模块是 RV1126 芯片的一个重要组成部分。它的主要功能是将外部接入的麦克风采集到的模拟信号通过内置的驱动程序转换为数字信号。这意味着麦克风作为外设,提供音频输入信号,AI 模块通过其硬件和软件的结合,…...
从零开始启动一个Vue项目
目录 一、首先下载Node.js 二、安装vue脚手架vue-cli 三、使用vue-ui创建一个vue项目 四、vue项目目录结构 五、启动vue项目 方法一:cmd窗口启动 方法二:软件中启动 一、首先下载Node.js 可以去看我的上一篇博客: NodeJs的安装及环境…...
存储过程和触发器
目录 1、存储过程 1.1 存储过程的概述 1.2 存储过程的类型 1. 系统存储过程 2. 本地存储过程 3. 临时存储过程 4. 扩展存储过程 1.3 T-SQL创建存储过程 1.4 T-SQL执行存储过程 1.5 T-SQL查看存储过程 1.6 T-SQL修改存储过程 1.7 T-SQL删除存储过程 2、触发器 2.1 …...
改进果蝇优化算法之一:自适应缩小步长的果蝇优化算法(ASFOA)
自适应缩小步长的果蝇优化算法(ASFOA)是对传统果蝇优化算法的一种重要改进,旨在克服其后期种群多样性不足、容易过早收敛和陷入局部最优等问题。有关果蝇优化算法的详情可以看我的文章:路径规划之启发式算法之二十七:果蝇优化算法(Fruit Fly Optimization Algorithm,FOA…...
道旅科技借助云消息队列 Kafka 版加速旅游大数据创新发展
作者:寒空、横槊、娜米、公仪 道旅科技:科技驱动,引领全球旅游分销服务 道旅科技 (https://www.didatravel.com/home) 成立于 2012 年,总部位于中国深圳,是一家以科技驱动的全球酒店资源批发商…...
LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…...
游戏引擎学习第80天
Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…...
CSS布局与响应式
学习链接 Grid网格布局 前端五大主流网页布局 flex布局看这一篇就够了 grid布局看这一篇就够了 用六个案例学会响应式布局 伸缩盒响应式页面布局实战 实现响应式布局的五种方式 - csdn 如何完成响应式布局,有几种方法?看这个就够了 响应式布局总…...
PyBroker:利用 Python 和机器学习助力算法交易
PyBroker:利用 Python 和机器学习助力算法交易 你是否希望借助 Python 和机器学习的力量来优化你的交易策略?那么你需要了解一下 PyBroker!这个 Python 框架专为开发算法交易策略而设计,尤其关注使用机器学习的策略。借助 PyBrok…...
深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术
深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术 导语 卷积神经网络(CNN)是现代深度学习领域中最重要的模型之一,特别在计算机视觉(CV)领域具有革命性的影响。无论是图…...
彩色图像面积计算一般方法及MATLAB实现
一、引言 在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…...
[Qt] Box Model | 控件样式 | 实现log_in界面
目录 1、样式属性 (1)盒模型(Box Model) 2、控件样式示例 (1)按钮 (2)复选框 (3)单选框 (4)输入框 (5)…...
内存与缓存:保姆级图文详解
文章目录 前言1、计算机存储设备1.1、硬盘、内存、缓存1.2、金字塔结构1.3、数据流通过程 2、数据结构内存效率3、数据结构缓存效率 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的…...
IM聊天学习资源
文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现(仿…...
Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…...
SpringMvc解决跨域问题的源码汇总。
看本文章前,需了解跨域的缘由。 其次,了解RequestMapping的基础原理 最后我们来解析SpringMvc是如何处理跨域问题的。 跨域信息配置 SpringMvc分为全局级别和局部级别两种,全局级别就是任何跨域请求都起作用。 全局级别 全局级别就是在配…...
25.1.17学习内容
B - 迷宫 Description 给定一个 NM 方格的迷宫,迷宫里有 T 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标,每个方格最多经过一次…...
【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Qt之文件系统操作和读写
Qt creator 6.80 MinGw 64bit 文本文件是指以纯文本格式存储的文件,如cpp和hpp文件。XML文件和JSON文件也是文本文件,只是使用了特定的标记符号定义文本的含义,读取这种文本文件需要先对内容解析再显示。 qt提供了两种读写文本文件的方法。…...