当前位置: 首页 > article >正文

Spring Boot MVC自动配置与Web应用开发详解

Spring Boot MVC自动配置机制

Spring Boot通过自动配置功能为MVC应用提供了开箱即用的默认配置,开发者无需手动配置即可获得完整的Web支持。以下是核心功能的实现原理:

静态资源支持

默认情况下,Spring Boot会自动从以下classpath目录提供静态资源:

  • /static
  • /public
  • /resources
  • /META-INF/resources
# 自定义静态资源路径匹配模式
spring.mvc.static-path-pattern=/content/**
# 修改静态资源位置
spring.web.resources.static-locations=classpath:/assets/

特殊功能:当存在index.html文件时,Spring Boot会自动将其作为欢迎页,无需额外配置。

消息转换器(HttpMessageConverters)

自动配置包含以下特性:

  • 默认集成Jackson库实现JSON序列化
  • 检测到jackson-dataformat-xml依赖时自动添加XML支持
  • 支持通过@JsonComponent注册自定义序列化器
// 自定义JSON序列化示例
@JsonComponent
public class CustomSerializer extends JsonSerializer {@Overridepublic void serialize(User value, JsonGenerator gen, SerializerProvider provider) {// 自定义序列化逻辑}
}

路径匹配与内容协商

默认行为控制:

# 禁用后缀模式匹配(如/api/user.json)
spring.mvc.pathmatch.use-suffix-pattern=false
# 启用参数内容协商(如/api/user?format=xml)
spring.mvc.contentnegotiation.favor-parameter=true
spring.mvc.contentnegotiation.parameter-name=format

错误处理机制

自动错误处理包含:

  • 全局错误页面映射到/error
  • 支持自定义错误页面(如src/main/resources/public/error/404.html
  • RESTful应用自动返回JSON格式错误
// 自定义错误页注册
@Bean
public ErrorPageRegistrar errorPageRegistrar() {return registry -> {registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));};
}

模板引擎支持

支持的模板引擎包括:

  • Thymeleaf
  • FreeMarker
  • Groovy Templates
  • Mustache

配置示例:

# 修改Thymeleaf模板路径
spring.thymeleaf.prefix=classpath:/templates/views/

自动配置实现原理

Spring Boot通过WebMvcAutoConfiguration类实现以下自动配置逻辑:

  1. 条件化Bean注册:根据classpath存在情况动态注册组件
  2. 默认值预设:通过WebProperties加载默认配置参数
  3. 定制化扩展:允许通过WebMvcConfigurer接口覆盖默认行为
// 典型配置覆盖示例
@Configuration
public class CustomWebConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List> converters) {// 添加自定义消息转换器}
}

该机制显著减少了传统Spring MVC应用中必需的XML/Java配置,同时保留了完整的可定制能力。开发者可以通过属性配置(application.properties/yaml)或编程方式灵活调整默认行为。

Spring Boot Web客户端开发

RestTemplate核心用法

Spring Boot通过RestTemplate类简化了服务间HTTP通信,该模板类采用模板方法模式封装了底层连接处理和异常管理。典型使用场景如下:

@AllArgsConstructor
@Component
public class UsersClient {private final RestTemplate restTemplate = new RestTemplate();private MyRetroProperties myRetroProperties;public User findUserByEmail(String email) {String uri = MessageFormat.format("{0}:{1}{2}/{3}",myRetroProperties.getUsers().getServer(),myRetroProperties.getUsers().getPort().toString(),USERS_URL, email);return restTemplate.getForObject(uri, User.class);}
}

关键特性包括:

  • 自动处理HTTP状态码转换
  • 内置JSON/XML消息转换
  • 支持URI模板参数绑定
  • 提供getForObject()/postForObject()等便捷方法

配置管理策略

采用@ConfigurationProperties实现外部服务配置的集中管理:

@ConfigurationProperties(prefix="service")
@Data
public class MyRetroProperties {UsersConfiguration users;
}@Data
public class UsersConfiguration {String server;Integer port;String username;String password;
}

对应application.yaml配置示例:

service:users:server: http://localhostport: 8082username: adminpassword: aW3s0m3

集成测试方案

结合@SpringBootTestTestRestTemplate进行端到端测试:

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class UsersClientTest {@AutowiredUsersClient usersClient;@Testpublic void findUserTest() {User user = usersClient.findUserByEmail("norma@email.com");assertThat(user).isNotNull();assertThat(user.getName()).isEqualTo("Norma");}
}

测试要点:

  • WebEnvironment.RANDOM_PORT启动真实服务实例
  • 自动注入端口号@Value("${local.server.port}")
  • 支持响应断言和异常场景测试

配置可见性优化

通过Lombok注解简化配置类定义:

@Data // 自动生成getter/setter
@AllArgsConstructor // 全参构造器
@NoArgsConstructor // 无参构造器
public class User {private String email;private List userRole;
}

该方案相比传统POJO定义可减少约60%的样板代码,同时保持运行时性能不变。实际开发中建议配合@Builder实现流畅API构建模式。

Spring MVC核心机制

DispatcherServlet:前端控制器

作为Spring MVC的核心组件,DispatcherServlet实现了经典的前端控制器模式,统一处理所有HTTP请求。该servlet在传统Spring应用中需要通过web.xml配置:

dispatcherorg.springframework.web.servlet.DispatcherServlet

而在Spring Boot中自动注册,开发者只需关注业务逻辑实现。其核心工作流程包括:

  1. 接收所有HTTP请求
  2. 通过HandlerMapping定位处理控制器
  3. 调用HandlerAdapter执行请求处理方法
  4. 使用ViewResolver解析视图
  5. 渲染响应结果

注解驱动开发

Spring MVC提供两类核心注解标记控制器:

@Controller

传统Web控制器注解,方法通常返回视图名称或Model对象:

@Controller
public class TraditionalController {@GetMapping("/greet")public String greet(Model model) {model.addAttribute("message", "Hello World");return "welcome"; // 对应视图模板}
}
@RestController

REST风格控制器注解,等价于@Controller+@ResponseBody组合:

@RestController
@RequestMapping("/api")
public class ApiController {@GetMapping("/users")public List listUsers() {return userRepository.findAll(); // 自动转为JSON}
}

关键区别:

特性@Controller@RestController
默认响应体处理需要@ResponseBody自动启用
典型返回类型视图名称/String业务对象
适用场景传统Web页面REST API

请求映射注解

Spring MVC提供细粒度的请求映射控制:

专用方法注解
@GetMapping("/resource/{id}")
@PostMapping("/resource")
@PutMapping("/resource/{id}")
@DeleteMapping("/resource/{id}")
@PatchMapping("/resource/{id}")
通用@RequestMapping

支持类级别和方法级别配置:

@RestController
@RequestMapping(value = "/api/v1", produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiV1Controller {@RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD})public ResponseEntity list() {// 同时支持GET和HEAD请求}
}

内容协商机制

Spring MVC支持多种内容协商策略:

基于Accept头
@GetMapping(value = "/data", produces = {MediaType.APPLICATION_JSON_VALUE,MediaType.APPLICATION_XML_VALUE
})
public Data getData() {// 根据请求头返回JSON或XML
}
基于URL后缀

默认禁用,需显式开启:

spring.mvc.pathmatch.use-suffix-pattern=true

示例请求:

GET /api/user.json  // 返回JSON
GET /api/user.xml   // 返回XML
基于请求参数
spring.mvc.contentnegotiation.favor-parameter=true
spring.mvc.contentnegotiation.parameter-name=format

示例请求:

GET /api/user?format=json

异常处理方案

全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity handleNotFound(ResourceNotFoundException ex) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse(ex.getMessage()));}
}
局部异常处理
@RestController
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userService.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));}@ExceptionHandler(IllegalArgumentException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)public ErrorResponse handleIllegalArgument(IllegalArgumentException ex) {return new ErrorResponse(ex.getMessage());}
}

该机制通过HandlerExceptionResolver组件实现,Spring Boot自动配置了默认实现,开发者可通过实现该接口进行深度定制。

用户服务应用改造实践

Lombok集成与POJO增强

通过Lombok库显著简化领域模型定义,@Data注解自动生成getter/setter等标准方法,@Builder实现流畅的构建器模式:

@Builder
@Data
public class User {@NotBlank(message = "Email不能为空")private String email;@Pattern(regexp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,}$", message = "密码需包含大小写字母和数字")private String password;@Singular("role") private List userRole;
}

关键特性:

  • @Singular自动生成集合元素的添加方法
  • 构建器模式使用示例:User.builder().email("test@mail.com").build()
  • 编译时生成的代码不影响运行时性能

验证机制实现

集成Spring Validation进行数据校验:

// 仓库层数据保存时自动触发校验
@Override
public User save(User user) {if(user.getGravatarUrl() == null) {user.setGravatarUrl(DEFAULT_AVATAR);}return users.put(user.getEmail(), user);
}

校验规则配置:

  • @NotBlank确保字符串非空
  • @Pattern实现正则表达式验证
  • 自定义错误消息直接嵌入注解

内存存储实现

采用ConcurrentHashMap实现线程安全的临时存储:

@Repository
public class UserRepository implements Repository {private final Map users = new ConcurrentHashMap<>();// 初始化测试数据{users.put("test@mail.com", User.builder().email("test@mail.com").build());}
}

核心方法:

  • save(): 实现UPSERT操作
  • findById(): 返回Optional避免NPE
  • deleteById(): 幂等性删除

依赖配置关键点

build.gradle关键依赖说明:

dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'implementation 'org.springframework.boot:spring-boot-starter-validation'compileOnly 'org.projectlombok:lombok'annotationProcessor 'org.projectlombok:lombok'
}

各组件作用:

  • spring-boot-starter-web: 提供嵌入式Tomcat和Spring MVC
  • spring-boot-starter-validation: 启用Bean Validation支持
  • Lombok相关依赖需同时声明编译时处理

功能测试验证

集成测试示例验证核心流程:

@SpringBootTest(webEnvironment = RANDOM_PORT)
class UserIntegrationTest {@AutowiredTestRestTemplate restTemplate;@Testvoid shouldRejectInvalidPassword() {User user = User.builder().password("weak").build();ResponseEntity response = restTemplate.postForEntity("/users", user, Map.class);assertThat(response.getStatusCode()).isEqualTo(BAD_REQUEST);}
}

测试覆盖要点:

  • HTTP状态码断言
  • 响应体内容验证
  • 异常场景模拟
  • 随机端口避免冲突

函数式Web端点开发

RouterFunction路由配置

Spring MVC的函数式编程模型通过RouterFunction替代传统的@RequestMapping注解,提供更灵活的路由定义方式。核心组件包括:

@Configuration
public class UsersRoutes {@Beanpublic RouterFunction userRoutes(UsersHandler handler) {return route().nest(RequestPredicates.path("/users"), builder -> {builder.GET("", accept(APPLICATION_JSON), handler::findAll);builder.GET("/{email}", handler::findUserByEmail);builder.POST("", handler::save);builder.DELETE("/{email}", handler::deleteByEmail);}).build();}
}

关键特性:

  • 使用route()方法开启Fluent API链式调用
  • nest()实现路径前缀分组
  • 通过RequestPredicates定义请求匹配条件
  • 支持内容协商(如accept(APPLICATION_JSON)

HandlerFunction请求处理

处理函数遵循ServerRequest入参、ServerResponse出参的规范:

@Component
public class UsersHandler {public ServerResponse findAll(ServerRequest request) {return ServerResponse.ok().contentType(APPLICATION_JSON).body(userRepository.findAll());}
}

处理流程:

  1. ServerRequest获取路径参数、查询参数、请求体等
  2. 执行业务逻辑
  3. 通过ServerResponse构建响应(状态码、头信息、响应体)

验证集成方案

函数式端点通过显式调用验证器实现参数校验:

@Bean
public Validator validator() {return new LocalValidatorFactoryBean();
}private BindingResult validate(User user) {DataBinder binder = new DataBinder(user);binder.addValidators(validator);binder.validate();return binder.getBindingResult();
}

校验触发时机:

  • 在Handler方法中手动调用验证
  • 通过BindingResult获取校验错误详情
  • 支持JSR-303注解(如@NotBlank

统一错误处理

标准化错误响应构建示例:

private ServerResponse prepareErrorResponse(BindingResult result) {Map response = new HashMap<>();response.put("timestamp", Instant.now());response.put("status", BAD_REQUEST.value());Map errors = result.getFieldErrors().stream().collect(toMap(FieldError::getField, FieldError::getDefaultMessage));response.put("errors", errors);return ServerResponse.status(BAD_REQUEST).body(response);
}

错误处理要素:

  • 包含时间戳、HTTP状态码等元数据
  • 按字段分组返回校验错误
  • 支持内容协商自动转换响应格式

与传统注解对比

特性注解式函数式
配置方式声明式注解编程式API
路由定义@RequestMappingRouterFunction
请求处理@ExceptionHandlerHandlerFunction
验证集成自动绑定显式调用
适用场景传统Controller响应式/函数式端点

该模式特别适合需要精细控制请求处理流程的场景,同时保持与Spring MVC原有组件的兼容性。

RESTful服务测试策略

TestRestTemplate集成测试

Spring Boot提供了TestRestTemplate作为专门优化的HTTP客户端工具,相比标准RestTemplate具有以下优势:

  • 自动处理4xx/5xx状态码(不抛出异常)
  • 内置测试环境配置
  • 支持基础认证和OAuth2
@SpringBootTest(webEnvironment = RANDOM_PORT)
class UserApiTest {@AutowiredTestRestTemplate restTemplate;@Testvoid shouldGetUserSuccess() {ResponseEntity response = restTemplate.getForEntity("/users/ximena@email.com", User.class);assertThat(response.getStatusCode()).isEqualTo(OK);assertThat(response.getBody().getName()).isEqualTo("Ximena");}
}

随机端口测试策略

通过@SpringBootTest(webEnvironment = RANDOM_PORT)启动测试时,Spring Boot会自动分配可用端口,避免端口冲突:

@Value("${local.server.port}") 
private int port;  // 注入实际端口号private String buildUrl(String path) {return "http://localhost:" + port + path;
}

验证测试设计

针对@Valid约束注解需要设计负面测试用例:

@Test
void shouldRejectInvalidPassword() {User invalidUser = User.builder().password("weak").build();ResponseEntity response = restTemplate.postForEntity("/users", invalidUser, Map.class);assertThat(response.getBody().get("errors")).asInstanceOf(MAP).containsKey("password");
}

响应断言技巧

使用AssertJ进行深度JSON验证:

@Test
void shouldReturnErrorDetails() {Map response = restTemplate.getForObject("/invalid-endpoint", Map.class);assertThat(response).containsKeys("timestamp", "status", "error").hasEntrySatisfying("status", value -> assertThat(value).isEqualTo(404));
}

测试要点:

  1. 使用@SpringBootTest加载完整应用上下文
  2. 验证HTTP状态码和响应头
  3. 对JSON响应体进行字段级断言
  4. 覆盖边界条件和异常场景

全文总结

Spring Boot的自动配置机制通过条件化Bean注册和默认值预设,显著减少了传统Spring应用90%以上的样板代码配置。现代Spring应用开发推荐采用注解驱动与函数式编程相结合的混合范式:

// 注解式控制器
@RestController 
public class UserController {@GetMapping("/users")public List list() { ... }
}// 函数式端点
@Configuration
public class UserRoutes {@Beanpublic RouterFunction routes() {return route().GET("/users", req -> ok().body(...)).build();}
}

服务间通信方面,虽然RestTemplate仍是可靠选择,但在响应式场景下应考虑WebClient作为替代方案。验证逻辑的实现需要同时覆盖正面路径和异常路径:

@Test
void shouldValidatePasswordStrength() {User weakUser = User.builder().password("123").build();ResponseEntity response = restTemplate.postForEntity("/users", weakUser, Map.class);assertThat(response.getBody().get("errors")).asInstanceOf(MAP).containsKey("password");
}

存储方案的选择上,内存存储(如ConcurrentHashMap)仅适用于开发测试环境,生产环境必须升级为持久化数据库方案(JPA/MyBatis)。通过@SpringBootTest的集成测试策略可确保应用质量:

@SpringBootTest(webEnvironment = RANDOM_PORT)
class IntegrationTest {@AutowiredTestRestTemplate client;@Testvoid shouldReturn404WhenNotFound() {var response = client.getForEntity("/not-exist", String.class);assertThat(response.getStatusCode()).isEqualTo(NOT_FOUND);}
}

这种技术组合既保留了Spring传统的强项(依赖注入、声明式事务),又融合了现代Java开发的最佳实践(Lombok、函数式编程),使得开发者能够高效构建符合生产要求的应用系统。

相关文章:

Spring Boot MVC自动配置与Web应用开发详解

Spring Boot MVC自动配置机制 Spring Boot通过自动配置功能为MVC应用提供了开箱即用的默认配置&#xff0c;开发者无需手动配置即可获得完整的Web支持。以下是核心功能的实现原理&#xff1a; 静态资源支持 默认情况下&#xff0c;Spring Boot会自动从以下classpath目录提供…...

OA工程自动化办公系统 – 免费Java源码

概述 功能完备的OA工程自动化办公系统Java源码&#xff0c;采用主流技术栈开发&#xff0c;无论是学习SpringBoot框架还是开发企业级应用&#xff0c;都是不可多得的优质资源。 主要内容 技术架构 ​​后端技术栈​​&#xff1a; 核心框架&#xff1a;SpringBoot 2.xORM框…...

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…...

某校体育场馆结构自动化监测

1. 项目简介 某小学学校成立于2020年&#xff0c;是一所公办小学&#xff0c;以高起点定位为该区优质教育新增长极&#xff0c;依托当地学院及教师进修学院附属小学资源&#xff0c;注重学生综合素质培养&#xff0c;近年来&#xff0c;该小学聚焦“五育” 领域&#xff0c;不…...

MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性

MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性,以下是两者的主要区别及其详细说明: 1. 认证机制 MySQL 8.0 支持 mysql_native_password 和 caching_sha2_password 认证插件。默认使用 caching_sha2_password,但未完全移除 mysql_native_password。MySQL 9.0 完全…...

Android 3D球形水平圆形旋转,旋转动态更换图片

看效果图 1、事件监听类 OnItemClickListener&#xff1a;3D旋转视图项点击监听器接口 public interface OnItemClickListener {/*** 当旋转视图中的项被点击时调用** param view 被点击的视图对象* param position 被点击项在旋转视图中的位置索引&#xff08;从0开始&a…...

数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP

数据结构与算法学习笔记----动态规划树形DP author: 明月清了个风 first publish time: 2025.6.4 ps⭐️树形动态规划&#xff08;树形DP&#xff09;是处理树结构问题的一种动态规划方法&#xff0c;特征也很明显&#xff0c;会有一个树形结构&#xff0c;其实是DFS的优化。…...

FTP 和 SFTP 介绍及 C/C++ 实现分析

1. FTP 协议概述 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于在网络上进行文件传输的标准协议&#xff0c;诞生于 1971 年&#xff0c;是互联网上最早的应用层协议之一。它基于客户端 - 服务器模型&#xff0c;使用 TCP 作为传输层协议&#xff0c;默认通过 …...

leetcode hot100刷题日记——36.最长连续序列

解答&#xff1a; 实际上在哈希表中存储不重复的数字。 然后遍历哈希表&#xff0c;找间隔&#xff0c;更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…...

CentOS7关闭防火墙、Linux开启关闭防火墙

文章目录 一、firewalld开启、关闭防火墙1、查看防火墙状态 一、firewalld开启、关闭防火墙 以下命令在linux系统CentOS7中操作开启关闭防火墙 # 查询防火墙状态 systemctl status firewalld.service # 开启防火墙 systemctl start firewalld.service # 开机自启动防火墙 syste…...

PyTorch——搭建小实战和Sequential的使用(7)

import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷积神经网络模型模型结构&#xff1a;3层卷积池化&#xff0c;2层全连接设计目标&#xff1a;处理32x32像素的…...

基于大模型的腔隙性脑梗塞风险预测及治疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、腔隙性脑梗塞概述 2.1 定义与分类 2.2 发病机制与病理生理过程 2.3 临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 基本概念与技术架构 3.2 在医疗领域的应用案例与优势 3.3 …...

Python 开发效率秘籍:PyCharm、VS Code 与 Anaconda 配置与实战全解

目录 一、IDE(集成开发环境)是什么?二、Python IDE有哪些&#xff0c;哪款适合初学者&#xff1f;三、Visual Studio Code下载和安装教程3.1 VS Code下载和安装3.2 VS Code运行Python程序 四、PyCharm下载和安装教程4.1 PyCharm下载4.2 PyCharm安装4.3 运行PyCharm4.4 创建工程…...

[C]C语言日志系统宏技巧解析

代码解释&#xff1a;日志标签字符串化宏 这段代码定义了一个名为 _LOG_TAG 的宏&#xff0c;用于将 LOG_TAG_CONST 转换为字符串形式。这在日志系统中很常见&#xff0c;用于为不同模块添加标识前缀。 宏结构分析 #define _LOG_TAG STR(LOG_TAG_CON…...

自动驾驶系统研发系列—激光雷达感知延迟:自动驾驶安全的隐形隐患?

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…...

内网应用如何实现外网访问?无公网IP本地端口网址服务提供互联网连接

一、应用程序外网访问遇到的问题 在现实的工作场景中&#xff0c;在公司内网的服务器上有很多的应用系统&#xff0c;这些系统只能局限于在公司内部使用&#xff0c;而在外网却无法使用。 二、外网访问内网应用常见的解决方案 如何在外网使用这些系统呢&#xff1f;下面简单…...

大话软工笔记—组合要素1之要素

1. 要素来源 对象是要素的来源&#xff0c;要素是从对象分解而来的。可将对象分为优化类和非优化类&#xff0c;如下图所示。 对象分类图 2. 要素的概念 2.1 要素的定义 要素&#xff0c;是构成事物必不可少的因素&#xff0c;要素的集合体构成了对象。 2.2 要素的内容 要…...

oracle从表B更新拼接字段到表A

oracle中表A怎么从表B中追加相对应的编码到表A字段里&#xff0c; 在Oracle数据库中&#xff0c;如果你想从表B中获取数据并更新到表A的某个字段里&#xff0c;可以使用UPDATE语句结合子查询来实现。假设表A有一个字段叫做code&#xff0c;你希望根据某个键&#xff08;比如id&…...

平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径

在科技快速发展的今天&#xff0c;质检行业正面临着效率、合规和数据安全的多重挑战。新一代质检 LIMS 系统以智能化与平台化为核心&#xff0c;为实验室管理提供了全新的解决方案。 一、智能化&#xff1a;从数据采集到分析的全流程升级 传统质检流程中&#xff0c;人工数据录…...

RedisTemplate查询不到redis中的数据问题(序列化)

RedisTemplate查询不到redis中的数据问题(序列化) 一.问题描述 存入Redis中的值取出来却为null,问题根本原因就是RedisTemplate和StringRedisTemplate的序列化问题、代码示例&#xff1a; SpringBootTest class Redis02SpringbootApplicationTests {Autowiredprivate RedisTe…...

如何利用乐维网管进行IP管理

IP管理是网络管理中的关键环节&#xff0c;对于保障网络的正常运行、提升资源利用效率以及保障网络安全等方面都具有不可忽视的重要性。乐维网管在IP管理方面具有多种实用功能&#xff0c;以下从IP规划与分配、IP状态监测、IP冲突处理、IP审计与报表生成四个方面&#xff0c;介…...

unix/linux,sudo,其历史争议、兼容性、生态、未来展望

sudo作为一个广泛应用的系统工具,在其发展历程中,自然也伴随着一些讨论、挑战和对未来的展望。 一、 历史争议与讨论 (Historical Controversies and Discussions) 虽然sudo被广泛认为是成功的,但也存在一些历史上的讨论点或潜在的争议: 复杂性 vs. 简洁性 (sudoers语法)…...

git stash命令用法

git stash 是 Git 中一个非常有用的命令&#xff0c;它可以临时保存当前工作区的修改&#xff0c;让你可以切换到其他分支或者处理其他任务&#xff0c;而不需要提交这些还未完成的修改。 一、基本用法 1. 保存当前修改&#xff08;包括暂存区和工作区的内容&#xff09; git…...

SkyWalking如何实现跨线程Trace传递

一、概述 SkyWalking 的中构建 Trace 信息时会借助 ThreadLocal来存储一些上下文信息&#xff0c;当遇到跨线程的时候&#xff0c;如果 Trace 的上下文信息没有传递到新线程的ThreadLocal 中&#xff0c;那么链路就断开了。那么SkyWalking是如何解决这个问题的呢&#xff1f; …...

软件工程专业的本科生应该具备哪些技能

软件工程专业的本科生需要具备扎实的技术基础、良好的开发流程认知和一定的软技能&#xff0c;以适应软件开发行业的需求。以下从技术技能、开发流程与工具、软技能、实践能力等维度整理核心技能清单&#xff0c;供参考&#xff1a; 一、核心技术技能 1. 编程语言 - 必学基础语…...

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库

在现代的 Java 应用开发中&#xff0c;Spring Boot 提供了强大的工具来简化数据库操作。JdbcTemplate 是 Spring 提供的一个核心类&#xff0c;用于简化 JDBC 操作&#xff0c;减少样板代码。本文将介绍如何在 Spring Boot 3.3 项目中使用 JdbcTemplate 来操作 MySQL 数据库&am…...

CentOS 7 修改为静态 IP 地址完整指南

在企业网络环境中,服务器通常需要配置静态 IP 地址以确保网络连接的稳定性和可管理性。以下是使用 NetworkManager 工具在 CentOS 7 系统中将动态 IP 配置修改为静态 IP 的完整指南: 一、检查当前网络配置 查看网络连接状态: 使用 nmcli connection show 命令列出所有网络连…...

企业级高防CDN选型指南

#!/bin/bash # 高防CDN性能压测工具 # 使用方法&#xff1a;./stress_test.sh <防护域名>DOMAIN$1 TEST_IP$(dig short $DOMAIN | head -n1) # 获取CDN节点IPecho "[压力测试] 目标: $DOMAIN ($TEST_IP)" echo "----------------------------------"…...

Redis-6.2.9 cluster集群部署和扩容缩容

目录 1 操作系统信息和redis软件版本 2 redis集群架构 3 redis软件安装 4 cluster创建 6 Redis集群节点扩容 7 redis集群节点缩容节点 1 操作系统信息和redis软件版本 rootu24-redis-120:~# cat /etc/issue Ubuntu 24.04.2 LTS \n \l rootu24-redis-120:~# redis-server…...

Java求职者面试指南:DevOps技术栈深度解析

Java求职者面试指南&#xff1a;DevOps技术栈深度解析 一、基础概念问题 1. 请解释什么是Docker&#xff1f; Docker是一个开源的应用容器引擎&#xff0c;它允许开发者将应用程序及其依赖打包到一个可移植的容器中&#xff0c;然后在任何支持Docker的环境中运行。Docker的核…...