我想创建可以保持100个连接就绪的连接池

时间:2019-03-23 07:00:39

标签: java mysql jdbc connection-pooling hikaricp

我正在设置一台新服务器,并希望为数据库操作创建连接池。因此,根据需要,我可以从池中建立连接,使用后我可以将该连接返回到池中。我想我完成了大部分任务,但是如何创建这些方法,该方法将从池中检索连接并返回到池中。

我正在使用此代码进行数据库连接。

public class DBConnection
{
    private static Session session;
    private static Connection connection;
    private static Properties properties;

    private static void go(){
        System.out.print("Establishing Connection with database.");

        try
        {
            JSch jsch = new JSch();
            session = jsch.getSession(
                    properties.getProperty("SERVER_USERNAME"),
                    properties.getProperty("SERVER_NAME"), 22);
            session.setPassword(properties.getProperty("SERVER_PASSWORD"));
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            int assinged_port=session.setPortForwardingL(
                    Integer.parseInt(properties.getProperty("LOCAL_PORT")),
                    properties.getProperty("SERVER_HOST"),
                    Integer.parseInt(properties.getProperty("SERVER_PORT")));

        }
        catch(Exception e){System.err.print(e);}
    }
    private static void conn() {

        if (session == null) { go(); }


        final String bs="?rewriteBatchedStatements=true";
        final String URL=properties.getProperty("DB_URL")+":"+
                properties.getProperty("LOCAL_PORT")+"/"+
                properties.getProperty("DB_NAME")+bs;

        BasicDataSource basicDataSource=new BasicDataSource();

        basicDataSource.setUrl(URL);
        basicDataSource.setUsername(properties.getProperty("DB_USERNAME"));
        basicDataSource.setPassword(properties.getProperty("DB_PASSWORD"));
        basicDataSource.setDriverClassName(properties.getProperty("DB_DRIVER_CLASS"));

        try {
            connection = basicDataSource.getConnection();

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
    public static Connection getConn(){

        if (properties == null) {
            try {
                properties = new Properties();
                FileInputStream fis = new FileInputStream(System.getProperty("user.dir").concat(File.separator).concat("DB.properties"));
                properties.load(fis);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if(connection == null)
        {
            conn();
        }
        //System.out.println("Database connection established.");
        return connection;
    }

}

如何创建池和两种方法,一种用于从池中获取连接,另一种用于将连接返回至池。

1 个答案:

答案 0 :(得分:0)

您已经在使用连接池(假设您使用的是org.apache.commons.dbcp.BasicDataSource或来自dbcp2的连接池),真正的问题是您正在创建静态的Connection并且只返回了一个连接。

请勿执行此操作,请删除静态字段connection,确保一次创建数据源并将其分配给静态字段,然后在getConn中调用getConnection数据源无条件。