0
点赞
收藏
分享

微信扫一扫

commons-pool之KeyedPoolableObjectFactory

认真的老去 2022-02-18 阅读 54
idemysqli++



public class MyURLConnection {

private boolean close;
private boolean connected;
private String name;
private String key;

public MyURLConnection(String name) {
this.name = name;
}

public MyURLConnection(String name,String key) {
this.name = name;
this.key = key;
}

public boolean isClose() {
return close;
}

public void setClose(boolean close) {
this.close = close;
}

public boolean isConnected() {
return connected;
}

public void setConnected(boolean connected) {
this.connected = connected;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void send(){
System.out.println(this.toString());
}

public String getKey() {
return key;
}


@Override
public String toString() {
return "MyURLConnection{" +
"close=" + close +
", connected=" + connected +
", name='" + name + '\'' +
", key='" + key + '\'' +
'}';
}
}


public class MyURLConnectionKeyedPoolableObjectFactory implements KeyedPoolableObjectFactory<String,MyURLConnection> {

AtomicInteger ato = new AtomicInteger(0);

@Override
public MyURLConnection makeObject(String key) throws Exception {
MyURLConnection connection = new MyURLConnection("connection"+ato.incrementAndGet(),key);
connection.setConnected(true);
System.out.println("key="+key+","+connection.getName()+",makeObject");
return connection;
}

@Override
public void destroyObject(String key, MyURLConnection connection) throws Exception {
connection.setClose(true);
System.out.println("key="+key+","+connection.getName()+",destroyObject");
}

@Override
public boolean validateObject(String key, MyURLConnection connection) {
System.out.println("key="+key+","+connection.getName()+",validateObject");
return !connection.isClose();
}

@Override
public void activateObject(String key, MyURLConnection connection) throws Exception {
System.out.println("key="+key+","+connection.getName()+",activateObject");
}

@Override
public void passivateObject(String key, MyURLConnection connection) throws Exception {
System.out.println("key="+key+","+connection.getName()+",passivateObject");
}
}


public class KeyedPoolableObjectTest {

public static void main(String[] args) throws Exception {
MyURLConnectionKeyedPoolableObjectFactory factory = new MyURLConnectionKeyedPoolableObjectFactory();
KeyedObjectPool pool = new StackKeyedObjectPool(factory);
try {

String[] keys = {"mysql","oracle","sqlserver"};

System.out.println("======================First ==========================");
for (int i = 0; i < 10; i++) {
String key = keys[i%keys.length];
MyURLConnection connection = (MyURLConnection)pool.borrowObject(key);
boolean exception = false;

try {
if(i==4){
throw new Exception(key+"远程已关闭连接");
}
connection.send();
} catch(Exception ex) {
ex.printStackTrace();
pool.invalidateObject(key, connection);
exception = true;
} finally {
if(!exception){
pool.returnObject(key, connection);
}
}
}


} finally {
try {
pool.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

}


源码:

_pools是1个hashmap

commons-pool之KeyedPoolableObjectFactory_i++

commons-pool之KeyedPoolableObjectFactory_ide_02



 

举报

相关推荐

0 条评论