记录 动态代理doris

这篇具有很好参考价值的文章主要介绍了记录 动态代理doris。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

黏贴主要代码

刚开始想着是  本地使用的是 mysql8的jar 包 ,可能和 doris 有冲突索引手动引入java包

    public static Connection getUnPooledConnection_Doris(DataSourceDto dataSource) throws SQLException {
        String jarFilePath =dataSource.getDictPath();
        String className = "com.mysql.jdbc.Driver";
        try (URLClassLoader loader = new URLClassLoader(new URL[]{new URL(jarFilePath)})) {
            Class<?> driverClass = Class.forName(className, true, loader);
            Driver driver = (Driver) driverClass.newInstance();
            Properties info = new Properties();
            info.put("user", dataSource.getUsername());
            info.put("password", dataSource.getPassword());

            Connection connection = driver.connect(dataSource.getJdbcUrl(), info);

            if (connection != null) {
                LOGGER.info("Connected to database version: {}", connection.getMetaData().getDatabaseProductVersion());
                LOGGER.info("Using JDBC driver version: {}", connection.getMetaData().getDriverVersion());
            }

            return connection;
        } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | MalformedURLException e) {
            throw new SQLException("Failed to load JDBC driver or establish a connection", e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

但是线上运行发现,内存一直在增加,手动引入的jar不释放,尝试很多办法依旧没见成效

偶然发现 

可以class 给 搞出来  简单还省事

 public Connection getUnPooledConnection_Doris(DataSourceDto dataSource) throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException, MalformedURLException {
        String className = "com.mysql.jdbc.Driver"; // MySQL 5.x 的驱动程序类名,MySQL 8.x 使用另一个类名
            Class<?> CA = Class.forName(className);
            Driver driver = (Driver) CA.newInstance();
            Connection connection = null;
            Properties info = new Properties();
            info.put("user", dataSource.getUsername());
            info.put("password", dataSource.getPassword());
            connection = driver.connect(dataSource.getJdbcUrl(), info);
            System.out.println(connection.getMetaData().getDatabaseProductVersion());
            System.out.println(connection.getMetaData().getDriverVersion());
            return connection;

    }

记录下-学艺不精,还得加油

当时参考网上大佬文章  大佬代码如下文章来源地址https://www.toymoban.com/news/detail-855636.html

import com.alibaba.fastjson.JSONObject;
import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
import com.anjiplus.template.gaea.business.code.ResponseCode;

import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class test {


    public static void main(String[] args) {
        Connection pooledConnection = null;

        try{
            Thread.sleep(10000);

            int count = 0;
            while (true) {
                System.out.println("start");
                String dir = "jar:file:D:/jar/mysql-connector-java-5.1.47.jar!/";
                URL url = new URL(dir);
                URL[] urls2 = {url};
                MyUrlClassLoader myUrlClassLoader = new MyUrlClassLoader(urls2);
                Class<?> CA = myUrlClassLoader.loadClass("com.mysql.jdbc.Driver");
                Driver driver = (Driver) CA.newInstance();
                Properties info = new Properties();
                info.put("user", "root");
                info.put("password", "xxx");
                Connection connection = driver.connect("jdbc:mysql://xxxx:9030/scv", info);
                System.out.println("--------------------"+connection.getMetaData().getDatabaseProductVersion());
                System.out.println("--------------------"+connection.getMetaData().getDriverVersion());
                pooledConnection = connection;
                PreparedStatement statement = pooledConnection.prepareStatement(" select * from  wms_inbound");

                ResultSet rs = statement.executeQuery();
                int columnCount = rs.getMetaData().getColumnCount();
                List<String> columns = new ArrayList<>();
                for (int i = 1; i <= columnCount; i++) {
                    String columnName = rs.getMetaData().getColumnLabel(i);
                    columns.add(columnName);
                }
                List<JSONObject> list = new ArrayList<>();
                while (rs.next()) {
                    JSONObject jo = new JSONObject();
                    columns.forEach(t -> {
                        try {
                            Object value = rs.getObject(t);
                            //数据类型转换
                            Object result = dealResult(value);
                            jo.put(t, result);
                        } catch (SQLException throwable) {
//                            log.error("error",throwable);
                            throw BusinessExceptionBuilder.build(ResponseCode.EXECUTE_SQL_ERROR, throwable.getMessage());
                        }
                    });
                    list.add(jo);
                }


                System.out.println(list.toString());


                System.out.println("done");
//                Thread.sleep(5000);
                myUrlClassLoader = null;
                System.out.println("release");
                System.gc();

                ++ count;
                if(count > 5)
                    break;
            }

            System.out.println("alldone");
        } catch (Exception e) {
            System.out.println("found exception");
            e.printStackTrace();
        } catch (Throwable throwable) {
            System.out.println("found throwable");
            throwable.printStackTrace();
        }


    }



    private static Object dealResult(Object result) throws SQLException {
        if (null == result) {
            return result;
        }
        String type = result.getClass().getName();
        if ("oracle.sql.TIMESTAMP".equals(type)) {
            //oracle.sql.TIMESTAMP处理逻辑
            return new Date((Long) JSONObject.toJSON(result));
        }

        return result;
    }


    private static class MyUrlClassLoader extends URLClassLoader {

        public MyUrlClassLoader(URL[] urls) {
            super(urls);
        }

        @Override
        protected Class<?> findClass(final String name) throws ClassNotFoundException {
            return super.findClass(name);
        }

        @Override
        protected void finalize() throws Throwable {
            System.out.println("回收");
            super.finalize();
        }
    }

}

到了这里,关于记录 动态代理doris的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中的代理模式(二)JDK动态代理

    大家好👋,我是极客涛😎,上一篇中我们对代理模式有两大类,静态代理和动态代理,对于静态代理相信大家都信手拈来。对于动态代理还有两种实现,一种是java原生的Jdk代理,一种是Cglib方式。因为涉及到源码解读,所以我也将分两期完成,本期主要讲讲JDK动态代理的实

    2024年01月22日
    浏览(39)
  • JAVA的动态代理详解

    动态代理提供了一种灵活且非侵入式的方式,可以对对象的行为进行定制和扩展。它在代码重用、解耦和业务逻辑分离、性能优化以及系统架构中起到了重要的作用。 增强对象的功能 :通过动态代理,可以在不修改原始对象的情况下,对其方法进行增强或添加额外的行为。

    2024年02月11日
    浏览(32)
  • Java动态代理

    我们可以把姬哥看成对象,那么他就会有唱,跳的方法。Java的动态代理就像中介,负责给他收钱的,以及之后维护的功能(也就是增强的功能)。当有人来找的时候,代理通过实现包含唱跳的方法的接口,

    2024年02月20日
    浏览(39)
  • Java——JDK动态代理

    动态代理(理解) 基于反射机制 举个例子,生活中一般在打官司的时候都会请代理律师,为什么要请律师呢?是因为开庭的时候大部人对于打官司没有经验,只会说出自己案件的陈述,并不会根据法律等争取自己权益的最大化,此时就可以请律师帮助自己不仅完成对案件的陈述

    2024年02月09日
    浏览(39)
  • Java动态代理、反射

    动态代理就是无侵入式的给代码增加新的功能,通过接口保证后面的对象和代理需要实现同一个接口,接口中就是被代理的所有方法,代理里面就是对象要被代理的方法。 因为一个对象觉得自己身上的功能太多,就会将一部分功能代理出去,对象中什么方法想要被代理,在代

    2024年02月11日
    浏览(48)
  • Java反射和动态代理

    反射允许对封装类的成员变量、成员方法和构造方法的信息进行编程访问 成员变量:修饰符、名字、类型、get/set值 构造方法:修饰符、名字、形参、创建对象 成员方法:修饰符、名字、形参、返回值、抛出的异常、获取注解、运行方法 获取class对象 Class.forName(“全类名”

    2024年02月03日
    浏览(54)
  • Java中的动态代理

    Java中常用的有两种动态代理方式,分别为:JDK动态代理和Cglib动态代理。 JDK动态代理是通过实现接口的方式完成动态代理。 Cglib动态代理是通过继承目标类或实现接口的方式完成动态代理。 JDK动态代理中最核心的就是Proxy类和InvocationHandler接口。 通过调用这个类中的静态方法

    2024年02月16日
    浏览(40)
  • 【Java学习笔记】 动态代理

    1、什么是动态代理? 前面已经提到了,动态代理就是【在内存】中动态生成【字节码代理类】的技术。(虽然不需要开发者书写,但是在内存层面依然存在该代理对象】 优点 : 减少了代理类的数量 并且解决了代码复用的问题。 动态代理常见的实现技术包括以下三种 JDK内

    2024年02月04日
    浏览(36)
  • [Java]静态代理、动态代理(基于JDK1.8)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18002823 出自【进步*于辰的博客】 参考笔记一,P83;笔记二,P75.4。 目录 1、概述 2、静态代理的两种形式 2.1 面向接口 2.2 面向继承 3、动态代理的两种形式 3.1 JDK动态代理

    2024年03月09日
    浏览(37)
  • java 中的动态代理实现

    1. 什么是代理模式 代理模式是常见的设计模式之一,顾名思义,代理模式就是代理对象具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理。(为真实对象提供代理,然后供其他对象通过代理访问真实对象)。 代理就是帮别

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包