最近使用showdoc编辑表格后突然数据丢失,研究源码发现是在解析时出现错误导致渲染失败
url加密传参有时候会出现Uncaught URIError: URI malformed的错误,这是因为你的url中包含了“%”字符,浏览器在对“%”执行decodeURIComponent时报错,正确的解决是将%全部替换为%25再进行传输:
urlStr.replace(/%/g, ‘%25’);
最近使用showdoc编辑表格后突然数据丢失,研究源码发现是在解析时出现错误导致渲染失败
url加密传参有时候会出现Uncaught URIError: URI malformed的错误,这是因为你的url中包含了“%”字符,浏览器在对“%”执行decodeURIComponent时报错,正确的解决是将%全部替换为%25再进行传输:
urlStr.replace(/%/g, ‘%25’);
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。 —-百度百科
2.添加lombok依赖,依赖的版本要跟加入插件的版本一致
1 | <dependency> |
4.代码中使用
1 | //使用该注解就可以省略 get set toString啦 |
1 使用
包名:
1 | import lombok.extern.log4j.Log4j2; |
注解:
1 |
使用
1 | log.info("log日志打印") |
2. 配置
1 | application.yml的配置: |
采用配置文件形式
1 | log配置之二,新建logback-spring.xml: |
1 | 错误: 找不到口令文件: C:\Users\hstech\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\δ????_TEMP\jmxremote.password |
访问这个路径发现乱码部分前面有个未命名
,这个是之前用的是2019版本,现在升级2020后使用了汉化包导致
1 | ## 之前 |
我把这个勾取消了,关于上面的前缀还没找到在哪设置
在这里添加这条语句好像可以运行了
1 | JAVA_OPTS -Dfile.encoding\\=UTF-8 |
因为我的项目名是中文,导致路径也是中文。idea中正常启动是可以的,只是控制台中文会乱码,当用jrebel启动的时候,直接报错。
参考其他人博客在jrebel的环境变量里加 JAVA_OPTS,确实不报错,但debug加了断点不进!
解决方法
1、
2、增加
1 | -Dfile.encoding=UTF-8 |
然后重启idea
3、tomcat中加 -Dfile.encoding=UTF-8
最后启动就ok了
为什么要配置ntp服务器呢?
我们先看看什么是NTP
NTP是用于同步网络中计算机时间的协议,全称为网络时间协议(Network Time Protocol)。
那有什么用呢,我们看看腾讯云对他的介绍
网络时间协议(Network Time Protocol,NTP),用于同步网络中各个计算机的时间的协议。其用途是将计算机的时钟同步到世界协调时 UTC。在 NTP 设计时考虑到了各种网络延迟,当您通过公共网络同步时,误差可以降低到10毫秒以内;当您通过本地网络同步时,误差可以降低到1毫秒。
总体就是说,为了保证时区和时间一致性以免影响到业务,这里可以看看阿里云怎么说。
时区和时间一致性对于云服务器ECS非常重要,有时会直接影响到任务执行的结果,例如,您在更新数据库或者分析日志时,时间顺序对结果有很大影响。为避免在实例上运行业务时出现逻辑混乱和网络请求错误等问题,您需要统一相关实例的时区设置。另外,您还可以通过NTP服务同步网络中所有服务器的本地时间。
下面介绍下国内的一些网络授时服务器
国家科学院国家授时中心
1 | ntp.ntsc.ac.cn |
阿里云
1 | ntp.cloud.aliyuncs.com |
腾讯云
1 | time1.cloud.tencent.com |
华为云
1 | 华北区 ntp.myhuaweicloud.com |
1 |
|
Hutool是Hu + tool的自造词,前者致敬我的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。
Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。
Hutool是一个Java工具包类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类
依赖可以导入所有或者按需引用
1 | <!-- 全部 --> |
模块 | 介绍 |
---|---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache | 简单缓存实现 |
hutool-core | 核心,包括Bean操作、日期、各种Util等 |
hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa | 基于DFA模型的多关键字查找 |
hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
hutool-http | 基于HttpUrlConnection的Http客户端封装 |
hutool-log | 自动识别日志实现的日志门面 |
hutool-script | 脚本执行封装,例如Javascript |
hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
hutool-system | 系统参数调用封装(JVM信息等) |
hutool-json | JSON实现 |
hutool-captcha | 图片验证码实现 |
hutool-poi | 针对POI中Excel的封装 |
hutool-socket | 基于Java的NIO和AIO的Socket封装 |
注意
阿里Maven的public
库没有对应依赖,需要使用central
库。
1 | <mirror> |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | <!--分页插件 begin--> |
代码
1 | //设置分页属性 |
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。
微服务架构就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。
总结起来微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。例如Eureka,Zookeeper等都是比较常见的服务集中化管理框架。
轻巧
将复杂的业务拆分成多个小的业务,每个业务拆分成一个服务,将复杂的问题简单化。利于分工,降低新人的学习成本。
细分业务
微服务系统是分布式系统,业务与业务之间完全解耦,随着业务的增加可以根据业务再拆分,具有极强的横向扩展能力。面对搞并发的场景可以将服务集群化部署,加强系统负载能力。
功能独立
服务间采用HTTP协议通信,服务与服务之间完全独立。每个服务可以根据业务场景选取合适的编程语言和数据库。
不影响其他功能
微服务每个服务都是独立部署的,每个服务的修改和部署对其他服务没有影响。
不受技术限制
在微服务中,我们可以结合项目业务及团队的特点,合理地选择技术栈
在软件设计的时候经常提到和使用经典的3层模型,即表现层,业务逻辑层,数据访问层。虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。此时服务架构如图:
一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。
结构简单,容易理解
对于开发人员而言,这是非常重要的一点。经典的分层架构已经相对比较成熟,更容易被更多的开发人员所理解和接受,学习成本也相对比较低,对团队本身的要求也不是特别高。这不仅使得系统的设计和开发都相对比较容易,而且出错的几率会相对低一些。用现在时髦的词语说,就是“坑相对较少”,开发实现都可以“踩在踩坑人的背上前进”
实现数据一致性相对比较容易
通过本地事务或者分布式事务可以方便有效地保证数据一致性
部署简单方便
可以方便快速地打包成WAR包,部署到Jetty或者Tomcat容器中。一次部署完成即可运行整个应用程序
总结起来,这种架构大致可以使用下图表示,各层组件可以通过相互引用进行相互调用,也可以通过IoC/DI实现解耦,进而实现应用程序“一体化”,这也是“单体架构”一词的由来:
系统仍然为单体应用
大量的业务必然会有大量的代码,代码的可读性和可维护性依然很差。
存在瓶颈
面对海量的用户,数据库将会成为瓶颈,解决方案将使用分布式数据库,也就是将数据库进行分库分表。
持续交付能力差
业务越复杂,代码越多,修改代码和添加代码所需的时间越长。新人熟悉代码的时间长、成本高。
1 | /** |