如何在Java代理中使用JDBC的连接池
答案:2 悬赏:0 手机版
解决时间 2021-02-08 19:46
- 提问者网友:了了无期
- 2021-02-08 01:01
如何在Java代理中使用JDBC的连接池
最佳答案
- 五星知识达人网友:独行浪子会拥风
- 2021-02-08 01:50
17 public class ProxyConnUtils {
18
19 private static LinkedList
20 private static String url;
21 private static String user;
22 private static String password;
23 private static String driverClass;
24 //private static Connection conn;
25 static{
26 try {
27 Properties properties = new Properties();
28 InputStream in = ProxyConnUtils.class.getResourceAsStream("/db.properties");
29 properties.load(in);
30 url = properties.getProperty("url");
31 System.err.println(url);
32 user = properties.getProperty("user");
33 password = properties.getProperty("password");
34 driverClass = properties.getProperty("driverClass");
35 Class.forName(driverClass);
36 for(int i = 0;i<3;i++){
37 final Connection conn = DriverManager.getConnection(url, user, password);
38 //对connection做代理
39 Object connProxy = Proxy.newProxyInstance(ProxyConnUtils.class.getClassLoader(),
40 new Class[]{Connection.class},
41 new InvocationHandler() {
42
43 @Override
44 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
45 //判断是否是close方法 回收连接
46 if(method.getName().equals("close")){
47 synchronized (pool) {
48 System.err.println("不能关闭");
49 pool.addLast((Connection) proxy);
50 pool.notify();
51 return null;
52 }
53 }else{
54 //若果调用的不是close方法 直接放行
55 return method.invoke(conn, args);
56 }
57 }
58 });
59 // 将代理对象添加到池中去
60 pool.add((Connection) connProxy);
61 }
62 } catch (Exception e) {
63 e.printStackTrace();
64 throw new RuntimeException(e);
65 }
66 }
67
68 //获取connection连接
69 public static Connection getConnection(){
70 synchronized (pool) {
71 if(pool.size() == 0){
72 try {
73 pool.wait();
74 } catch (Exception e) {
75 e.printStackTrace();
76 throw new RuntimeException(e);
77 }
78 }
79 Connection connection = pool.removeFirst();
80 return connection;
81 }
82 }
83 }
全部回答
- 1楼网友:几近狂妄
- 2021-02-08 02:35
jdbc和连接池对于你这个场景来说,都足够,既然用spring管理了,建议还是使用连接池,另外,spring自身没有实现连接池,一般都是对第三方连接池的包装,常见的有c3p0,dbcp以及最近比较流行的bonecp等,这几个配置都差不多太多,以bonecp为例:
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯