SpringBoot通过SSH连接服务器数据库 有一些情况下,数据库为了安全起见,往往只允许一些特定的 IP 进行连接,而此时我们其他的服务区想对其进行连接,一种方法是使得该数据库允许我们的服务器对其进行连接,一种是将数据库设置成所有人可连接,还有一种方法就是本文我们所讲的方法:通过 SSH 连接到被允许链接的服务器 IP ,将此服务器作为一个支点,然后再连接到数据库中。
以 Mysql 数据库为例,我们通过以下的步骤以及对其进行连接。
1、实现方法 1.1、引入依赖 新建一个 SpringBoot 项目,引入以下的依赖: 该依赖是 Mysql 数据库进行 SSH 连接所必需的一个依赖,不能缺少。
1 2 3 4 5 <dependency > <groupId > com.jcraft</groupId > <artifactId > jsch</artifactId > <version > 0.1.55</version > </dependency >
1.2、创建连接 然后新建一个工具类SSHConnection
,里面编写的是SSH连接服务器的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 public class SSHConnection { private final static String SSH_USER = "root" ; private final static String SSH_PASSWORD = "123456" ; private final static String SSH_REMOTE_SERVER = "xxx.xxx.xxx.xxx" ; private final static int SSH_REMOTE_PORT = 22 ; private final static int REMOTE_PORT = 3306 ; private final static int LOCAL_PORT = 3307 ; private final static String MYSQL_REMOTE_SERVER = "xxx.xxx.xxx.xxx" ; private Session session = null ; public SSHConnection () throws Throwable { JSch jsch = new JSch(); session = jsch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT); session.setPassword(SSH_PASSWORD); Properties config = new Properties(); config.put("StrictHostKeyChecking" , "no" ); session.setConfig(config); session.connect(); session.setPortForwardingL(LOCAL_PORT, MYSQL_REMOTE_SERVER, REMOTE_PORT); } public void closeSSH () { this .session.disconnect(); } }
1.3、java监听类,监听SSH连接情况 创建一个监听类MyContextListener
,在 SSH 连接和断开时提供监听和反馈的作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @WebListener @Component public class MyContextListener implements ServletContextListener { private SSHConnection conexionssh; public MyContextListener () { super (); } @Override public void contextInitialized (ServletContextEvent arg0) { try { conexionssh = new SSHConnection(); conexionssh.SSHConnection(); System.out.println("成功建立SSH连接!" ); } catch (Throwable e) { System.out.println("SSH连接失败!" ); e.printStackTrace(); } } @Override public void contextDestroyed (ServletContextEvent arg0) { System.out.println("Context destroyed ... !\n\n\n" ); try { conexionssh.closeSSH(); System.out.println("成功断开SSH连接!" ); } catch (Exception e) { e.printStackTrace(); System.out.println("断开SSH连接出错!" ); } } }
1.4、编写配置文件 在最后编写 SpringBoot的配置文件,即可运行使用
1 2 3 4 5 6 7 spring.datasource.url=jdbc:mysql://127.0.0.1:3307/数据库名称?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=数据库名 spring.datasource.password=数据库密码 spring.datasource.druid.test-on-borrow=true spring.datasource.druid.test-while-idle=true