java springboot使用ssh连接数据库仅需三步

1、引入pom

  <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
    </dependency>

2、创建一个ssh连接配置

package cn.com.baidu.jswyj.system.common.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Properties;


@Component
public class SshConfiguration implements ServletContextInitializer {
    protected final Logger log = Logger.getLogger(this.getClass());

    public SshConfiguration() {
        try {
            Properties p = new Properties();
            p.load(getClass().getResourceAsStream("/application.properties"));
            //如果配置文件包含ssh.forward.enabled属性,则使用ssh转发
            if(p.getProperty("ssh.forward.enabled")!=null){
                log.info("ssh forward is opend.");
                log.info("ssh init ……");
                Session session = new JSch().getSession(p.getProperty("ssh.forward.username"),p.getProperty("ssh.forward.host"),Integer.valueOf(p.getProperty("ssh.forward.port")));
                session.setConfig("StrictHostKeyChecking", "no");
                session.setPassword(p.getProperty("ssh.forward.password"));
                session.connect();
                session.setPortForwardingL(p.getProperty("ssh.forward.from_host"),Integer.valueOf(p.getProperty("ssh.forward.from_port")) ,p.getProperty("ssh.forward.to_host") ,Integer.valueOf(p.getProperty("ssh.forward.to_port")) );
            }else{
                log.info("ssh forward is closed.");
            }
        } catch (IOException e) {
            log.error("ssh IOException failed.", e);
        } catch (JSchException e) {
            log.error("ssh JSchException failed.", e);
        } catch (Exception e) {
            log.error("ssh settings is failed. skip!", e);
        }
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

    }
}

3、修改application.properties配置文件

添加配置:
 

#ssh配置
ssh.forward.enabled
#SSH地址
ssh.forward.host=ssh.server.com
#SSH端口
ssh.forward.port=22
#SSH用户名
ssh.forward.username=root
#SSH密码
ssh.forward.password=123
#绑定的本地地址
ssh.forward.from_host=localhost
#绑定的本地端口
ssh.forward.from_port=3307
#正向代理的远程地址
ssh.forward.to_host=yuancheng.com
#正向代理的远程端口
ssh.forward.to_port=3306

修改配置:

spring.datasource.url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123

原理:项目启动时先创建ssh连接,监听本地3307端口。
然后再创建数据库连接,连接本地3307端口,连接请求就会通过ssh服务器被转发到远程3306端口
 

发布了26 篇原创文章 · 获赞 0 · 访问量 763

猜你喜欢

转载自blog.csdn.net/sumengnan/article/details/104352975
今日推荐