java中远程服务器通过ssh连接mysql和redis

配置连接

maven依赖如下

		<dependency>
            <groupId>com.jcraftgroupId>
            <artifactId>jschartifactId>
            <version>0.1.53version>
        dependency>

java代码如下

package com.***.***.***;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.util.Properties;

public class SShConnectUtils {

        String user = "user";
        // 服务器登录名
        String password = "password";
        // 登陆密码
        String host = "***.**.***.***";
        //服务器公网IP
        int port = 22;
        // 跳板机ssh开放的接口   默认端口 22
        int local_port = 3307;
        // 这个是本地的端口,很重要!!!选取一个没有占用的port即可
        String remote_host = "127.0.0.1";
        // 要访问的mysql所在的host    服务器局域网IP(127.0.0.1也行)
        int remote_port = 3307;
        // 服务器上数据库端口号
        Session session = null;
        /**
         *    建立SSH连接
         */
        public void SSHConnection() throws Exception{
            try {
                JSch jsch = new JSch();
                session = jsch.getSession(user, host, port);
                session.setPassword(password);
                session.setConfig("StrictHostKeyChecking", "no");
                // 日志打印自己脑补
                session.connect();
                session.setPortForwardingL(local_port, remote_host, remote_port);
            } catch (Exception e) {
                // do something
            }
        }
        /**
         *    断开SSH连接
         */
        public void closeSSH () throws Exception
        {
            this.session.disconnect();
        }


}

监听连接

package com.***.***.***;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
@Component
public class ConnectListener implements ServletContextListener {

        private SShConnectUtils conexionssh;

        public ConnectListener() {
            super();
        }

        /**
         * @see ServletContextListener#contextInitialized(ServletContextEvent)
         */
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            // 建立连接
            System.out.println("Context initialized ... !\n\n\n");
            try {
                conexionssh = new SShConnectUtils();
                conexionssh.SSHConnection();
                System.out.println("\n\n\n成功建立SSH连接!\n\n\n");
            } catch (Throwable e) {
                System.out.println("\n\n\nSSH连接失败!\n\n\n");
                e.printStackTrace(); // error connecting SSH server
            }
        }


    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // 断开连接
        System.out.println("Context destroyed ... !\n\n\n");
        try {
            conexionssh.closeSSH(); // disconnect
            System.out.println("\n\n\n成功断开SSH连接!\n\n\n");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("\n\n\n断开SSH连接出错!\n\n\n");
        }
    }

}

yml配置

spring:
  datasource:
  	#3307为服务器mysql端口
    url: jdbc:mysql://localhost:3307/database_name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&autoReconnect=true
    #服务器mysql用户名密码
    username: user
    password: password

如果需要连接redis,则添加一行代码配置redis连接参数
remote_port默认为6379,remote_host默认127.0.0.1,local_port选择本地未被占用的端口

session.setPortForwardingL(local_port, remote_host, remote_port);

之后配置yml

redis:
    #连接池
    jedis:
      pool:
        #最大连接个数
        max-active: 10
        #等待时间
        max-wait: 6000ms
        #最大空闲
        max-idle: 8
        #初始化最小
        min-idle: 5
        #操作第几个库

    database: 1
    #redis路径
    host: 127.0.0.1
    password: password
    port: 6379

你可能感兴趣的:(开发总结,mysql,ssh,java)