使用SSH连接池连接MySQL(JSch)

时间:2018-03-12 19:41:04

标签: java mysql jsch

我正在开发一个连接MySQL数据库的大学java项目。我建立我的连接没有问题,Jsch负责SSH部分。现在,当我将数据插入到我的数据库中时,每次重新打开连接时都会非常慢。

我的问题是我解决速度问题的最佳(最简单)方法是什么?我一直在阅读有关连接池的内容,但所有答案都不同,我不确定如何将它们中的任何一个应用到我自己的代码中。我是否需要创建两个池,一个用于SSH,另一个用于MySQL连接?

这是我的代码的连接部分,感谢任何帮助。

int lport=5656;
String rhost="REDACTED";
String host="REDACTED"; //
int rport=3306;
String user="REDACTED";
String password="REDACTED";
String dbuserName = "REDACTED";
String dbpassword = "REDACTED";
String url = "jdbc:mysql://localhost:"+lport+"/db";
String driverName="com.mysql.jdbc.Driver";
Connection conn = null;
Session session= null;
Statement stmt = null;

public void init() throws SQLException {
    try{
        //Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue
        java.util.Properties config = new java.util.Properties(); 
        config.put("StrictHostKeyChecking", "no");
        JSch jsch = new JSch();
        session=jsch.getSession(user, host, 21098);
        session.setPassword(password);
        session.setConfig(config);
        session.connect();
        System.out.println("Connected");
        int assinged_port=session.setPortForwardingL(lport, rhost, rport);
        System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);
        System.out.println("Port Forwarded");

        //mysql database connectivity
        Class.forName(driverName).newInstance();
        conn = DriverManager.getConnection (url, dbuserName, dbpassword);
        System.out.println ("Database connection established");
        System.out.println("DONE");

1 个答案:

答案 0 :(得分:1)

为避免重新连接数据库,可以使用apache commons库,它有DBCP包,可以让你创建池,你可以查看这个示例代码:

    @EnableOAuth2Sso
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {

        @Autowired
        @Qualifier("customUserDetailsService")
        private UserDetailsService userDetailsService;



        @Override
        public void configure(HttpSecurity http) throws Exception {

            http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**")
                .permitAll()
                .anyRequest()
                .authenticated();
        }

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService);
        }

    }