它是一个开源、轻量级和高性能的 Web 服务器,也用作 HTTP、HTTPS、SMTP、IMAP、POP3 协议的反向代理服务器,另一方面,它也用作 IMAP、POP3 和 IMAP 的 HTTP 负载均衡器、HTTP 缓存和电子邮件代理。
简而言之,我们可以说 Nginx 是一种用于处理并发请求的软件。
ubuntu环境下
sudo apt-get update
sudo apt-get install nginx
ps -ef | grep nginx
Nginx Full:它允许端口 80 和 443。
sudo ufw allow 'Nginx Full'
Nginx HTTP:它只允许端口 80。
sudo ufw allow 'Nginx HTTP'
Nginx HTTPS:它只允许端口 443。
sudo ufw allow 'Nginx HTTPS'
默认情况下,安装 Ubuntu 后,Nginx 会自动启动,我们可以通过以下命令查看 Nginx 的状态:
systemctl status nginx
Optional 是 Java 8 引入的一个容器类,代表一个值存在或不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好地表达这个概念。并且可以避免空指针异常(NullPointerException)。
作为方法的返回类型:当你想要明确表示一个方法可能会返回值也可能不返回值时,可以使用 Optional 作为返回类型。
避免空指针异常:通过使用 Optional,你可以显式地检查值是否存在,从而避免直接访问可能导致的 NullPointerException。
提供默认操作:如果值不存在,可以通过 Optional 提供的方法来指定默认行为。
随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将介绍两种 MyBatis-Plus 的多数据源扩展插件:开源生态的 dynamic-datasource 和 企业级生态的 mybatis-mate。
dynamic-datasource 是一个开源的 Spring Boot 多数据源启动器,提供了丰富的功能,包括数据源分组、敏感信息加密、独立初始化表结构等。
数据源分组:适用于多种场景,如读写分离、一主多从等。 敏感信息加密:使用 ENC() 加密数据库配置信息。 独立初始化:支持每个数据库独立初始化表结构和数据库。 自定义注解:支持自定义注解,需继承 DS。 简化集成:提供对 Druid、HikariCP 等连接池的快速集成。 组件集成:支持 Mybatis-Plus、Quartz 等组件的集成方案。 动态数据源:支持项目启动后动态增加或移除数据源。 分布式事务:提供基于 Seata 的分布式事务方案。
本框架专注于数据源切换,不限制具体操作。 配置文件中以下划线 _ 分割的数据源首部为组名。 切换数据源可以是组名或具体数据源名。 默认数据源名为 master,可通过 spring.datasource.dynamic.primary 修改。 方法上的注解优先于类上的注解。
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
在 MyBatis-Plus 中,Wrapper 类是构建查询和更新条件的核心工具。以下是主要的 Wrapper 类及其功能:
AbstractWrapper:这是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。它定义了条件构造的基本逻辑,包括字段(column)、值(value)、操作符(condition)等。所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承自 AbstractWrapper。
QueryWrapper:专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。它允许你以链式调用的方式添加多个查询条件,并且可以组合使用 and 和 or 逻辑。
UpdateWrapper:用于构造更新条件,可以在更新数据时指定条件。与 QueryWrapper 类似,它也支持链式调用和逻辑组合。使用 UpdateWrapper 可以在不创建实体对象的情况下,直接设置更新字段和条件。
LambdaQueryWrapper:这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。
LambdaUpdateWrapper:类似于 LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表达式的更新条件构造器。它允许你使用 Lambda 表达式来指定更新字段和条件,同样避免了硬编码字段名的问题。
如果被调用服务方法有HttpServletResponse,会导致调用失败,因为Feign不能处理HttpServletResponse
使用返回值ResponseEntity<org.springframework.core.io.Resource>进行处理
java @GetMapping("/download")
public void download(@RequestParam(value = "fileUrl") String fileUrl, HttpServletResponse response){
try {
ResponseEntity<org.springframework.core.io.Resource> responseEntity = remoteFileService.downloadByRes(fileUrl);;
if (responseEntity.getStatusCode().is2xxSuccessful()) {
org.springframework.core.io.Resource resource = responseEntity.getBody();
if (resource != null) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + resource.getFilename());
try (OutputStream outputStream = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = resource.getInputStream().read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
}
}
} else {
response.setStatus(responseEntity.getStatusCodeValue());
}
} catch (IOException e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}