在我们日常开发中, 会遇到这样一种场景, 就是读取表格中的数据, 并将数据以附件的形式通过邮箱发送到表格中的每个人 即: excel 读取+ excel 写入+ 发送邮件(携带附件), 例如: 公司在做工资单发送功能时, 财务将所有人的工资单excel上传, 后台通过excel 读取, 然后将每个人的工资信息写入到一个excel, 最后以邮件的形式发送. 为了应对这一场景, 我们来进行技术选型. 然而功能实现了, 使用就没有问题吗? 通过对后续暴露问题的分析来体会下利用技术实现功能往往是开发的第一步, 后面仍需要我们根据具体的软硬件情况对代码进行优化.
首先以无加密方式搭建
相关jar
配置文件进行配置
Excel 数据列列名实体
@ExcelProperty
中 index
属性用于文件读取时, 指定读取的列, 而 value 用于在列写入时, 指定列的表头.
采取 value = {"序号", "序号"}
是因为存在复合表头, 这里需要根据自己业务具体情况去编写
业务代码
附: redisUtils工具类代码
利用jasypt 对项目配置文件中, 敏感信息进行加密. Jasypt 是一个 Java 库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理.
使用步骤
引入jar
启动类使用 @EnableEncryptableProperties
敏感信息加密
引入jar坐标之后, 找到所下载的位置, 如果使用的是idea, 默认jar存储路径在 C:\Users\Administrator\.m2\repository\org\jasypt\jasypt\1.9.2
下
利用jar进行加密 进入命令行, 输入java -cp命令
对配置文件中的邮箱密码(pop3)进行加密
在测试上述技术时, 由于当初使用的是腾讯企业邮箱, 在开发自测以及测试小规模测试之后并未发现问题. 但是在项目发布到生产环境之后问题方才暴露出来. 那是一个周五的晚上. 收到消息的我真的是血压突突上涨…
同步改异步, 长连接改为短连接
修改主业务流程类
异步线程类
用于发送邮件
邮件发送工具类
实现手动创建连接, 发送邮件, 关闭连接操作
通过对问题的深入挖掘和分析最终解决了问题, 由此可见在不少场景下, 仅仅实现功能是不够的, 还需要我们结合实际情况对业务交互方式进行修改. 例如同步改异步, 串行改并行, 立即执行与延迟执行, 长短连接的取舍等等… 让用户体验良好, 就需要后端同学多做功课, 给予前端快速响应. 无论是异步执行还是接口性能优化, 都需要我们具体情况具体分析. 学无止境, 我们下次再见!!!
更多jasypt的配置可见 小白入门之 Jasypt 加密和解密