weblogic to tomcat

本文介绍Java中从jar包读取配置文件的方法,并探讨了不同应用服务器(如Tomcat与WebLogic)中类加载器的工作原理及配置差异。文章还讨论了字符集设置对数据库连接的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 getResourceAsStream() path issue

ec.jar was put on /WEB-INF/lib
ec.jar structure:
-com/abc/classA
-conf/config.properties

or
put them on /WEB-INF/classes

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ReadPropFromJar {

private static String path="/conf/config2.properties";
private static Properties p=new Properties();
public ReadPropFromJar(){
InputStream in=ReadProperties.class.getResourceAsStream(path);
try{
p.load(in);
//p.getProperty(key);
}catch(IOException ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
ReadPropFromJar rp=new ReadPropFromJar();
System.out.println(rp.getKey("db.user"));

}

public String getKey(String key){
return p.getProperty(key);
}
}

如果path"/"开头,表示以classpath为准(classes,lib)
如果path"conf/config.properties",表示这个文件在class对象的相对目录里


2 charset issue:
tomcat default use iso-8859-1 as URIEncoding
url="jdbc:mysql://localhost/app?useUnicode=true&characterEncoding=utf-8"

3 classloader conflict
[img]http://farm3.static.flickr.com/2682/4379354938_dc7cd5f47e_o.png[/img]
默认情况,weblogic按委托机制加载类,效果就是越上层的classloader优先级越高,一个class如果在上层classloader能加载到,就不会让下面的classloader加载。

Tomcat默认先从webappclassloader载入class,如果失败则请求父ClassLoader的代理
这样可以让不同的WEB APP之间的类载入互不干扰.


weblogic也有webappClassloader, 但是需要配置才生效
在weblogic.xml中配置<prefer-web-inf-classes>,可以让web application classloader优先在自己war范围内加载类,找不到的类才会请求上层classloader

weblogic还有个Filtering loader比较有意思。Filtering classloader是个特殊的classloader,它并不会加载任何类,而是起到控制类加载优先级的作用。在weblogic-application.xml中配置<prefer-application-packages>,可以限制对于指定的类不再向上层classloader请求,也就是限制在EAR的范围之内加载。
### 如何搭建 TomcatWebLogic 集群 #### 搭建 Tomcat 集群 为了构建一个高可用性的 Tomcat 应用程序环境,可以采用基于 Docker 的方法来部署多个 Tomcat 实例形成集群。 创建自定义的 `Dockerfile` 来定制化 Tomcat 容器: ```dockerfile FROM tomcat:latest COPY myapp.war /usr/local/tomcat/webapps/ ``` 上述脚本指定了基础镜像是最新的官方 Tomcat 版本,并将应用程序包 (`myapp.war`) 复制到了默认的应用发布路径下[^1]。 通过执行如下指令可依据此 `Dockerfile` 构建一个新的镜像: ```bash docker build -t my-tomcat-image . ``` 启动容器实例时指定端口映射关系以便外部访问服务: ```bash docker run -d -p 8080:8080 my-tomcat-image ``` 这一步骤会以前台模式运行新建立的 Tomcat 映像,在宿主机上开放 8080 端口连接至容器内部相同编号的服务接口[^2]。 对于更复杂的场景比如负载均衡或跨节点通信,则需引入额外组件如 Nginx 或 HAProxy 进行流量分发以及配置 session stickiness 功能确保同一用户的请求总是被转发给同一个后端服务器处理;另外还需要考虑数据一致性问题,可通过共享存储解决方案或者调整应用逻辑实现无状态设计从而简化架构复杂度。 #### 搭建 WebLogic 集群 针对 Oracle WebLogic Server (WLS),同样可以通过 Docker 技术快速设置起一套生产级别的集群系统。不过由于 WLS 是商业软件产品,因此获取其合法授权至关重要。 首先准备包含所需版本 WLS 软件介质在内的 Dockerfile 文件用于制作私有镜像仓库中的 base image: ```dockerfile # 使用官方提供的 JDK 基础镜像作为起点 FROM oraclelinux:7-slim ENV JAVA_HOME=/usr/java/default \ PATH=$PATH:/usr/java/default/bin \ WL_HOME=/u01/oracle/wlserver \ DOMAIN_NAME=base_domain \ ADMIN_PORT=7001 \ USER_MEM_ARGS="-Xms256m -Xmx512m" RUN yum install -y unzip && \ mkdir -p $WL_HOME && \ cd /tmp && curl -O http://example.com/path/to/fmw_12.2.1.3.0_wls.jar && \ java -jar fmw_12.2.1.3.0_wls.jar -rf /tmp/* WORKDIR /u01/oracle/user_projects/domains/$DOMAIN_NAME EXPOSE ${ADMIN_PORT} CMD ["startWebLogic.sh"] ``` 注意这里假设已经获得了正确的安装包下载链接并且能够顺利解压安装到目标位置。实际操作过程中可能涉及到更多细节上的差异取决于具体使用的 WLS 发布版特性集。 接着利用该模板生成特定于项目的子镜像并加入必要的个性化设定,例如增加管理控制台的安全认证机制、预置一些常用工具插件等。最后按照常规流程完成整个域(domain)结构的设计规划工作——包括但不限于定义受管服务器(managed server)成员列表及其监听地址端口号信息等内容之后再实施批量部署动作即可达成预期效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值