很多时候,我们可能会出现这种情况:我们的程序无法直接连接数据库,而要通过某一台linux等中间机器来实现一个中转,比如我们的机器是A,数据库是C,A和C不能直接连接,但A可以连接B,B可以连接C,这时我就可以通过ssh通道来进行数据库连接。Jsch是纯Java实现的SSH开源框架
可以用来执行shell命令,实现sftp上传,同时我们也可以使用它来进行数据库连接通道。
1、添加依赖
com.jcraft
jsch
0.1.54
org.nutz
nutz
1.r.65
com.alibaba
druid
1.1.8
mysql
mysql-connector-java
2、创建数据访问对象public Dao getDao(String mysqlHost, String schema, String mysqlUser, String mysqlPwd, String linuxHost, int linuxPort, String linuxUser, String linuxPwd, int localPort, int remotePort) throws Exception {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session = jsch.getSession(linuxUser, linuxHost, linuxPort);
session.setPassword(linuxPwd);
session.setConfig(config);
session.connect();
session.setPortForwardingL(localPort, mysqlHost, remotePort);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUsername(mysqlUser);
ds.setPassword(mysqlPwd);
//此处其实是在本地开放一个端口,所以地址不用修改,同时本地需要保留该端口,不让其他程序占用
ds.setUrl("jdbc:mysql://localhost:" + localPort + "/" + schema + "");
Dao dao = new NutDao(ds);
return dao;
}
3、数据操作相关,可直接参考nutz官网,如果不想使用连接池或nutzDao,自行创建原生jdbc连接或引用其他框架即可。