URLClassLoader初体验

使用概要:
​File file = new File(jar文件全路径); 
​URL url = file.toURL(); 
​URLClassLoader loader = new URLClassLoader(new URL[] { url });
​Class tidyClazz = loader.loadClass(所需class的含包名的全名);

笔者案例:

[img]http://dl2.iteye.com/upload/attachment/0103/6855/7c805ff2-1609-3b1c-a58d-1c25db5e8dfd.png[/img]

示例代码:

log4j.properties文件代码如下:

log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout


JarLoadUtil.java文件代码如下:

package com.shihuan.urlclassloader;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

import org.apache.commons.lang.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JarLoadUtil {

private static Logger logger = LoggerFactory.getLogger(JarLoadUtil.class);
private static URLClassLoader loader = null;

/*
* 加载lib目录下所有jar文件,并返回相应的的URLClassLoader
*/
public static URLClassLoader getURLClassLoader() {
if (loader == null) {
String fileNames[] = listFileNames();
if (fileNames != null && fileNames.length > 0) {
URL urls[] = new URL[fileNames.length];
for (int i = 0; i < fileNames.length; i++) {
try {
StringBuilder sb = new StringBuilder();
sb.append("file:").append(SystemUtils.FILE_SEPARATOR).append(System.getProperty("user.dir")).append(SystemUtils.FILE_SEPARATOR).append("lib");
urls[i] = new URL(sb.toString() + SystemUtils.FILE_SEPARATOR + fileNames[i]);
} catch (MalformedURLException e) {
logger.error("加载lib目录下jar文件出错!", e);
throw new RuntimeException("加载lib目录下jar文件出错!", e);
}
}
loader = new URLClassLoader(urls);
}
}
return loader;
}

/*
* 查询lib目录下的所有文件名称
*/
private static String[] listFileNames() {
File file_directory = new File("lib");
return file_directory.list();
}

}


TestUrlClassLoader.java文件代码如下:

package com.shihuan.test;

import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.logicalcobwebs.proxool.ProxoolDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.shihuan.urlclassloader.JarLoadUtil;

public class TestUrlClassLoader {

private static Logger logger = LoggerFactory.getLogger(TestUrlClassLoader.class);

/**
* @param args
*/
public static void main(String[] args) {
URLClassLoader loader = JarLoadUtil.getURLClassLoader();

ProxoolDataSource ds = new ProxoolDataSource();
ds.setDriver("com.mysql.jdbc.Driver");
ds.setDriverUrl("jdbc:mysql://localhost:3306/myword");
ds.setUser("root");
ds.setPassword("12345678");

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

Class<?> clazz = null;
try {
clazz = loader.loadClass(ds.getDriver());
Driver driver = (Driver)clazz.newInstance();

Properties p = new Properties();
p.put("user", ds.getUser());
p.put("password", ds.getPassword());

conn = driver.connect(ds.getDriverUrl(), p);

logger.info(conn.toString());

String sql = "select id,name from mytaba";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " -- " + rs.getString("name"));
}

rs.close();
pstmt.close();
conn.close();

} catch (ClassNotFoundException e) {
logger.error(e.getMessage(), e);
} catch (InstantiationException e) {
logger.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
logger.error(e.getMessage(), e);
} catch (SQLException e) {
logger.error(e.getMessage(), e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}

}


运行TestUrlClassLoader.java文件中的main方法即可。


或者在dos窗口执行ant命令后进入%PROJECT_HOME%/dist/jar目录,执行java -jar myapp-${日期}.jar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值