WebLogic 12c部署应用时AWS S3客户端执行build()方法无响应如何解决
可能的原因
- 类加载冲突:WebLogic 12c 默认优先加载服务器自带的依赖包,很容易和AWS SDK for Java 1.x依赖的
httpclient、jackson、commons-codec等第三方包版本冲突。本地IDEA运行时优先使用项目里打包的依赖版本,所以不会出现问题。可在项目的WEB-INF下添加weblogic.xml配置,指定优先加载应用内的AWS相关包:
<weblogic-web-app> <container-descriptor> <prefer-application-packages> <package-name>com.amazonaws.*</package-name> <package-name>org.apache.http.*</package-name> <package-name>com.fasterxml.jackson.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
- 实例元数据查询阻塞:AWS SDK 1.x在构建客户端时,默认会尝试访问AWS实例元数据地址
169.254.169.254获取凭证和区域配置,如果WebLogic服务器部署在非AWS环境,或者网络策略禁止访问该地址,SDK会卡在多次重试超时的逻辑中,没有报错是因为还没到最大重试时长。可在构建客户端时显式关闭元数据查询,添加配置:
ClientConfiguration clientCfg = new ClientConfiguration(); clientCfg.setUseInstanceMetadata(false); standard.withClientConfiguration(clientCfg);
- 网络访问限制:WebLogic服务器所在的网络环境可能配置了防火墙、全局代理,或者安全组规则禁止访问指定的S3端点地址,SDK在客户端构建阶段会做端点连通性预校验,卡在网络连接步骤。本地运行正常是因为本地网络没有相关限制。
- JDK加密策略限制:WebLogic使用的JDK如果默认开启了JCE加密强度限制,AWS SDK在和S3端点做SSL握手时,会因为无法使用高强度加密算法卡在协商步骤。本地IDEA使用的JDK可能已经配置了无限制JCE策略文件,所以运行正常。
- 日志框架冲突:AWS SDK默认依赖commons-logging打印日志,如果应用和WebLogic自带的日志实现(比如log4j、slf4j绑定)版本冲突,会导致日志输出线程阻塞,看起来像程序执行卡顿没有日志输出。
内容的提问来源于stack exchange,提问作者SibirBear
相关产品推荐
相关产品推荐

