Tomcat 的基本使用
Tomcat 我已经使用很久了,但是仅仅停留在 IDE 中通过 Tomcat 启动 Web项目,兑取其中很重部署细节以及管理细节都不太清楚,今天趁着项目需要所有对如下几个细节进行总结,并形成文,方便后续查找。
内容包括:
- 命令行启动和关闭 Tomcat
- 配置 Tomcat
- Tomcat Manager
- 部署 War包
Tomcat 我已经使用很久了,但是仅仅停留在 IDE 中通过 Tomcat 启动 Web项目,兑取其中很重部署细节以及管理细节都不太清楚,今天趁着项目需要所有对如下几个细节进行总结,并形成文,方便后续查找。
内容包括:
最近有个SpringBoot
项目,需要扫描指定包下带有带有指定注解的类,最开始使用的是hutool
下的 ClassScaner.scanPackageByAnnotation
这个方法进行扫描。
在前期开发阶段工作正常,但是最近在中期部署的时候,将 SpringBoot
项目打包成 jar
后在服务器运行的时候,直接报出了空指针异常,经过查看记录,代码没有在指定包下找到任何一个 class
。
为了解决这个问题我尝试了如下方法:
JDK
本来是 OpenJDK
,更换成了 SunJDK
,无法解决!Guava
提供的 ClassPath.from
,无法解决!war
包后,部署到 tomcat
后运行,成功解决!经过上述测试后发现,只有将项目打包为war 后在 Tomcat下运行才能正常扫描。这下我的心都凉了,因为如果一个SpringBoot
项目还必打包为传统的 war 然后部署,那么SpringBoot
的优势会少很多。
之前腾讯云打折,买了一台腾讯的云服务器,主要打算就是做这个博客。 因为上面运行的是我的博客所以不敢在上面乱折腾,最近恰好看到阿里云的ECS在打折,所以就入手了一台,作为平时测试和开发调试使用。 再部署完基础环境后,启动了一个单机的Zookeeper实例,通过本地客户端发现无法访问。
本文属于对Java线程池的综合思考,如果您对Java线程池还不太了解,可以先收藏。 本文讲解如下几个内容: 当核心线程满时,先创建临时线程还是先加入队列?临时线程工作时间和方式?核心线程和临时线程获取活的方式?只有临时线程才能被销毁吗?何时触发拒绝策略?线程池如何调优?
在最开始学习Spring Cloud
的时候,了解其中有个组件叫做Feign
: 可以通过既定规则在本地消费端存留一份服务提供者的接口,这样消费者便可以直接通过这个接口来进行服务消费。
Spring Cloud
是一个开源方案的整合体,其中的Feign
组件整合的就是已有的一个开源组件Feign
。
Feign
的中文含义是: 假装!
缓存的引入能够帮助DB减轻检索压力,但是如果不能很好的处理数据一致性的问题,那么会导致读取脏数据的问题,解下来2篇文章就总结下几种缓存更新策略:
如果更新缓存
如果删除缓存
上一篇文章提到了2个观点: 缓存必须设置过期时间,可以保证数据的最终一致性。在数据发生变更的同时,重新建立缓存是没有必要的操作。 同时提到了数据更新的时候,删除缓存和更新DB,哪个操作应该先行了? 本文同上一篇文章一样,假设在不为缓存添加过期时间极端情况下,进行思考。 先删除缓存,再更新DB先更新DB,再删除缓存
这篇文章算是对之前阅读、学习、实践的一个总结。 本文主要是讲讲在Spring中,通过@Autowired之类注解,注入的对象到底是什么? 同时引申出一些关于:AOP使用的一些细节。
本文主要介绍SpringMVC对Controller
中对外方法的参数的解析接口HandlerMethodArgumentResolver
,包括如下说明:
项目需要通过代理对SpringBoot进行部分监控,业界最有名的是可能是SpringBootAdmin了,之前也有过了解,界面和作用都挺好看的,本次好奇心驱动下,探究了下源码。 分别从1.X和2.X版本来理解,本文主要是其思想,时间关系不涉及太多源码,其实其源码也很少,相信大家能够搞定。
Netty 是一个性能强健的 网络通信库。 很多开源项目都是使用其作为底层的通信框架,比如 Dubbo,Kafka等。之前用 Netty做过项目,写了一个基于命令模式的通信框架,后续有机会整理后,分享出来,哪个命令模式的框架其实很简单,我都不好写出来,不过它确实是支撑了有些利国利民的项目。后续有机会分享。 Netty概念很多,写 demo 很容易,但是要精通的或者说是入门的话,不下一番苦功夫是不行的。 今天翻看了之前的 Netty 记录的比较,将所有的概念整理后出了一副图,我们围绕图来说说 Netty的架构。
lombok这个插件非常好用,通过简单的注解就能省略很多冗余代码,常规的:@Data,@Getter/@Setter,@Slf4J这些基础的我就不写了,随便一百度就可以知道。 今天我们来讲讲几个冷门但是却好用的注解: @NonNull@Cleanup@SneakyThrows@Synchronized
本文作为一个总结,主要是对Spring Cloud的部分组件原理进行一个提纲挈领的总结。具体的实现,后续有机会分享,网上也有很多。本文主要概括下 Ribbon 和 Feign的原理。
Feign在Github上开源了一个项目,可以更加方便的利用Feign进行文件传输和多参数传输。 项目地址:https://github.com/OpenFeign/feign-form 这篇文章就结合官方的Test总结下用法。
最近工作和心态发生了一点变化,对未来的自己提出了更高的要求,所以在阅读和思考上,更加严格的要求自己的了。 之前临时看了一本书《分布式服务架构:原理、设计与实战》,因为时间缘故,很多点都没有看到,现在相对时间充足了点,所以一边读,一边做总结。 记录、分析、总结、提高! 微服务和SOA的区别 SOA强调异构服务通过一个总线进行协作,有一个中心化的企业服务总线。微服务是没有这样一个总线的。 去中心化的理解 服务的核心数据:信息,没有在某个地方聚合进行传输。ESB不是去中心化,因为信息在企业服务总线进行了聚合。 流量都走网关的问题 前段时间和用户交流SpringCloud过程中,用户认为所有服务的流量都是通过了API网关进行了转发。 为了解释这个问题在交流过程中,提出了外部应用和内部应用2个概念。内部应用就是在Eureka Server这类服务注册中心进行了注册的服务。外部应用反之。 内部应用因为在EurekaServer进行了注册,所以获取到内部服务节点的IP等关键信息,所以可以直接发起访问。 外部应用涉及到安全等原因,不能够获取到内部应用真实的IP地址,所以只给你暴露一个API网关的....