Java SSH 秘钥连接mysql数据库的方法

yizhihongxing

下面是详细讲解“Java SSH 秘钥连接mysql数据库的方法”的完整攻略,步骤如下:

1. 生成密钥文件

在本地电脑上生成密钥文件,使用如下命令:

$ ssh-keygen -t rsa -b 2048

然后你会看到生成了两个文件:id_rsaid_rsa.pub,这两个文件一个是私钥,一个是公钥。将公钥文件 id_rsa.pub 发送给服务器管理员,并让他把公钥添加到服务器上的~/.ssh/authorized_keys 文件中。

2. 开启SSH转发

在你的 Java 代码中需要使用 SSH 转发来访问远程 MySQL 服务器。你需要在本地启动 SSH 连接并配置端口转发(-forwarding)功能。假设你的私钥文件为 id_rsa,服务器的 IP 地址为 123.123.123.123,用户名为 root ,则可以使用如下命令:

$ ssh -i /path/to/id_rsa -fN -L 33306:localhost:3306 root@123.123.123.123

在这个命令中,-i 表示使用指定的私钥文件,-fN 表示将 SSH 连接作为守护进程在后台运行,并且不打开远程 shell。 -L 表示端口转发的本地端口 33306将被转发到远程服务器的本地端口 3306

3. 配置 MySQL 数据库连接

在 Java 代码中使用如下配置信息连接远程 MySQL 数据库:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:33306/your_schema?autoReconnect=true&useSSL=false
spring.datasource.username=your_root_user_name
spring.datasource.password=your_root_password

spring.datasource.url 中的 localhost:33306 是转发后的本地端口号,your_schema 是你要连接的数据库名称。

示例

下面给出两个示例说明。

示例 1

一个名为 SSHDatabaseConnection 的类,连接远程的 MySQL 数据库,使用 Spring 框架的 JDBC 与数据库进行交互。代码如下:

import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class SSHDatabaseConnection {
    public static void main(String[] args) {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:33306/your_schema?autoReconnect=true&useSSL=false");
        dataSource.setUsername("your_root_user_name");
        dataSource.setPassword("your_root_password");
        // ... 使用 Spring JDBC 进行相应的数据库操作 ...
    }
}

示例 2

使用 Mybatis 框架连接远程的 MySQL 数据库。代码中使用的是 Spring Boot 框架启动的应用。

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;

@Service
public class UserService {
    @Autowired private DataSource dataSource;

    @Autowired private DataSourceTransactionManager dataSourceTransactionManager;

    @Autowired private MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean;

    @Transactional
    public User getUser(long id) {
        SqlSession sqlSession = mybatisSqlSessionFactoryBean.getObject().openSession(true);
        try {
            // 获取 mapper 实例
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            return userMapper.findById(id);
        } finally {
            sqlSession.close();
        }
    }
}

其中的 DataSourceDataSourceTransactionManager 的配置与示例 1 中相同,这里不再赘述。MybatisSqlSessionFactoryBean 是 Mybatis 框架提供的一个工厂 Bean,其配置如下:

import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.io.IOException;

@Component
public class MybatisSqlSessionFactoryBean extends SqlSessionFactoryBean {
    @Autowired private DataSource dataSource;
    @Override
    public void afterPropertiesSet() throws Exception {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            // 扫描 Mybatis 配置文件
            Resource[] resources = resolver.getResources("classpath:/mybatis/mapper/*.xml");
            setDataSource(dataSource);
            setMapperLocations(resources);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

这里将 Mybatis 的 mapper 配置文件放到 classpath:/mybatis/mapper/ 目录下。Mybatis 的 mapper 配置文件与 Java 定义的 DAO 接口对应,所以还需要一个名为 UserMapper 的接口:

public interface UserMapper {
    User findById(long id);
}

这个接口对应的查询语句需要写在 classpath:/mybatis/mapper/UserMapper.xml 文件中。

到此为止,我们就完成了使用 Java SSH 秘钥连接 MySQL 数据库的方法的攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SSH 秘钥连接mysql数据库的方法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Redis缓存的主要异常及解决方案

    作者:京东物流 陈昌浩 1 导读 Redis 是当前最流行的 NoSQL数据库。Redis主要用来做缓存使用,在提高数据查询效率、保护数据库等方面起到了关键性的作用,很大程度上提高系统的性能。当然在使用过程中,也会出现一些异常情景,导致Redis失去缓存作用。 2 异常类型 异常主要有 缓存雪崩 缓存穿透 缓存击穿。 2.1 缓存雪崩 2.1.1 现象 缓存…

    Redis 2023年4月11日
    00
  • mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT解决办法

    当使用mysql8创建用户并授权时,可能会遇到ERROR 1410 (42000): You are not allowed to create a user with GRANT的报错提示。这是因为mysql8对用户的管理进行了更加严格的权限控制,不是所有用户都可以执行创建授权的操作。以下是解决这个问题的完整攻略: 1. 确认当前登录用户是否具有创建用户的…

    database 2023年5月18日
    00
  • 本地Windows远程桌面连接阿里云Ubuntu 16.04服务器的操作方法

    以下是详细的操作方法,让您可以在本地Windows系统中远程连接到阿里云Ubuntu 16.04服务器: 1. 确保防火墙已开放22端口 在您的阿里云服务器中,打开一个终端窗口并输入以下命令: sudo ufw allow 22/tcp 此命令将允许远程桌面协议连接到您的服务器。 2. 安装桌面环境和远程桌面软件 在终端中,输入以下命令: sudo apt …

    database 2023年5月22日
    00
  • mysql密码忘记后如何修改密码(2022年最新版详细教程保姆级)

    MySQL密码忘记后如何修改密码 MySQL是目前最常用的关系型数据库管理系统,但有时我们可能会忘记MySQL的密码,接下来就会介绍如何重置MySQL密码。 步骤一:停止MySQL服务 在开始之前,我们需要先停止MySQL服务。在Windows系统中,可以在任务管理器中结束任务,也可以使用以下命令行停止MySQL服务: net stop mysql 在Lin…

    database 2023年5月22日
    00
  • ThinkPHP中关联查询实例

    ThinkPHP中关联查询实例 ThinkPHP的关联查询功能可以让我们更加便捷、灵活的进行数据查询操作。具体来说,我们可以通过关联查询对多张数据表进行联合查询,得到更加具有实际意义和完整性的数据结果集。下面,我来为大家详细讲解如何使用ThinkPHP进行关联查询操作。 1. 基本概述 ThinkPHP中的关联查询主要有两种: 一对一关联 一对多关联 在关联…

    database 2023年5月21日
    00
  • oracle用户权限、角色管理详解

    下面给大家分享一下关于“oracle用户权限、角色管理详解”的攻略。首先,我们需要了解三个概念:用户、权限、角色。用户是指能够访问数据库的个体,权限是指用户针对某些数据库对象所具备的操作能力,而角色就是一组权限的集合,许多用户可以共享同一个角色。 一、用户管理 对用户进行管理,需要掌握以下几个关键点: 创建用户 使用CREATE USER语句可以创建用户。例…

    database 2023年5月21日
    00
  • Navicat连接MySQL8.0的正确方法(亲测有效)

    下面是“Navicat连接MySQL8.0的正确方法(亲测有效)”的完整攻略: 导入MySQL8.0 JDBC驱动 在Navicat中连接MySQL8.0数据库之前,需要先导入MySQL8.0的JDBC驱动。操作步骤如下: 下载MySQL8.0的JDBC驱动(下载地址:https://dev.mysql.com/downloads/connector/j/)…

    database 2023年5月18日
    00
  • MySQL优化之使用连接(join)代替子查询

    让我来为你详细讲解一下“MySQL优化之使用连接(join)代替子查询”的完整攻略。 什么是子查询和连接 在MySQL中,子查询和连接都是用来进行多表查询的方式。 子查询,也称为内层查询,是指嵌入在另一个查询语句中的查询。它的执行方式是先执行内部的子查询,然后将其结果拿出来再执行外层的主查询。 连接,也称作外关联查询,是指在两个或多个表之间建立关联,通过连接…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部