跳到主要内容
Apache王也道长

Apache王也道长

喜欢写一点代码,喜欢折腾

产品

正在打磨的产品

把技术文章沉淀成产品能力,也把产品研发过程继续写成文章。

开发中

Cloud Album

面向海外用户的私有云相册,围绕备份、整理和订阅体验持续打磨。

从真实产品研发出发,记录 iOS 客户端、MinIO 存储、海外支付与增长实验的完整过程。

iOS AppMinIO 存储海外订阅

技术博客

最新文章

Spring Boot 发送邮件:SMTP、HTML 正文、附件与常见错误

· 阅读需 3 分钟
Apache王也道长
软件开发者与技术作者

这篇文章主要讲解 spring boot如何发送邮件

发送邮件是一个很常用的功能,比如线上故障告警,验证码等功能都会用到,下面我们来看看用spring mail 来实现发送邮件 邮件发送属于外部依赖,业务线程不应无限等待 SMTP 响应。生产环境应设置超时、重试和异步队列,并避免在日志中打印收件内容与认证信息。

MongoDB Linux 安装教程:服务启动、认证与远程连接

· 阅读需 2 分钟
Apache王也道长
软件开发者与技术作者

这篇文章主要讲解 mongodb linux安装教程

  1. 进入MongoDB下载中心:http://www.mongodb.org/downloads

  2. 根据自己的实际系统环境,下载所要的文件,我的是Linux 64-bit. MongoDB 默认配置不应直接暴露到公网。安装完成后应启用认证、限制监听地址和防火墙来源,并建立备份、监控和磁盘容量告警。

Spring Data Redis 常见问题:Key/Value 序列化、连接池与缓存排查

· 阅读需 3 分钟
Apache王也道长
软件开发者与技术作者

[TOC]

1. key序列化问题

使用spring-data-redis中的redisTemplate存储key-value,然后使用redis-cli去查询时查询不到相应的key。使用keys *时发现redis中key的前缀多了一些字符 Redis 问题经常表现为乱码、类型转换失败、连接耗尽或缓存数据不一致。排查时应先确认 key/value 序列化器、客户端版本、超时配置和实际写入数据。

CentOS 7 Apache 配置 HTTPS:证书、虚拟主机与 HTTP 跳转

· 阅读需 3 分钟
Apache王也道长
软件开发者与技术作者

本文将告诉你怎么去配置apache2的https

前提条件:

  1. 安装了apache2
  2. apache2所在目录是/usr/local/
  3. ssl证书已上传到了apache2/conf 目录下(一般是一个zip包) 如果名称不叫ssl.zip 请把名称改成ssl.zip (mv xxxx.zip ssl.zip) CentOS 7 与旧版 Apache 已逐渐进入维护末期,本文更适合作为历史环境参考。实际部署前应确认系统仍获得安全更新,并优先使用受支持的操作系统和现代 TLS 配置。

MySQL 5.7 安装教程:初始化、配置文件、账号安全与服务管理

· 阅读需 3 分钟
Apache王也道长
软件开发者与技术作者

这篇文章主要讲解 mysql-5.7.x安装

这里讲解的是mysql-5.7 window版本的安装,linux类似 首先上mysql官方网站下载mysql,下载地址:http://dev.mysql.com/downloads/mysql/ 我这里选择的是(mysql-5.7.15-winx64.zip) MySQL 5.7 已属于旧版本,继续使用前应确认厂商支持与安全维护状态。新项目优先评估受支持版本;维护旧环境时应限制访问并制定升级计划。

Spring Boot RESTful API 教程:Controller、JSON、参数校验与异常处理

· 阅读需 11 分钟
Apache王也道长
软件开发者与技术作者

构建一个restful的web服务

这篇文章告诉你如何通过spring创建一个"hello world"的restful的web服务 一个可维护的 REST API 不只返回 JSON,还应定义资源路径、HTTP 方法、状态码、参数校验和统一错误格式。示例接口上线前还要补充认证、限流和日志脱敏。

JavaScript 获取函数名、参数名和对象属性:name、反射与限制

· 阅读需 3 分钟
Apache王也道长
软件开发者与技术作者

这篇文章主要讲解 javascript获取函数名称、函数参数、对象属性名称的代码实例

一、获取函数名称的3种实现方法

实例1:

在js权威指南中看到的一个方法:

function.prototype.getname = function(){
return this.name || this.tostring().match(/function\s(()(/)[1]
}

运行时反射结果可能被转译器、压缩器和代码混淆改变,因此不应把函数名或参数名作为稳定业务协议。调试工具可以使用这些信息,正式逻辑更适合显式传入元数据。

总访问量 -- · 访客数 --