当前位置: 首页 > 知识库问答 >
问题:

Spring Boot通过SSL远程Mysql连接

吴松
2023-03-14
public class XXXCoreApplication {

public static void main(String[] args) throws SQLException {
    Connection connection = null;
    Session session = null;

    String host = "XX.XXX.XX.XXX";
    String servUser = "user";
    String servPwd = "pass";
    int port = 22;

    String rhost = "localhost";
    int rport = 3306;
    int lport = 3307;

    String driverName = "com.mysql.jdbc.Driver";
    String db2Url = "jdbc:mysql://localhost:" + lport + "/xxx_core";
    String dbUsr = "MT";
    String dbPwd = "****";

    try {
        JSch jsch = new JSch();
        // Get SSH session
        session = jsch.getSession(servUser, host, port);
        session.setPassword(servPwd);
        java.util.Properties config = new java.util.Properties();
        // Never automatically add new host keys to the host file
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        // Connect to remote server
        session.connect();
        // Apply the port forwarding
        session.setPortForwardingL(lport, rhost, rport);
        // Connect to remote database
        Class.forName(driverName);
        connection = DriverManager.getConnection(db2Url, dbUsr, dbPwd);
        System.out.println("Connection to database established!");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
        if (session != null && session.isConnected()) {
            session.disconnect();
        }
    }
    SpringApplication.run(XXXCoreApplication.class, args);
}

“无法确定数据库类型None的嵌入式数据库驱动程序类”

我应该给Application.Properties中的spring.datasource.url值什么?或者其他建议?谢了。

共有1个答案

翟宏放
2023-03-14

您正在关闭finally块中的SSH隧道。

我建议您也让Spring创建SSH隧道,而不是在main方法中创建。这将允许您为不同的环境选择启用/禁用隧道,并且可以使用属性和其他Spring Boot特性来配置、启动和停止隧道。

像这样的东西会管用的。

public class SshTunnelStarter {

    @Value("${ssh.tunnel.url}")
    private String url;

    @Value("${ssh.tunnel.username}")
    private String username;

    @Value("${ssh.tunnel.password}")
    private String password;

    @Value("${ssh.tunnel.port:22}")
    private int port;

    private Session session;

    @PostConstruct
    public void init() throws Exception {
       JSch jsch = new JSch();
       // Get SSH session
       session = jsch.getSession(servUser, host, port);
       session.setPassword(servPwd);
       java.util.Properties config = new java.util.Properties();
       // Never automatically add new host keys to the host file
       config.put("StrictHostKeyChecking", "no");
       session.setConfig(config);
       // Connect to remote server
       session.connect();
       // Apply the port forwarding
       session.setPortForwardingL(lport, rhost, rport);
    }

    @PreDestroy
    public void shutdown() throws Exception {
       if (session != null && session.isConnected()) {
           session.disconnect();
       }
    }
}
 类似资料:
  • 问题内容: 我正在尝试使用mysql_connect从PHP通过SSL连接到远程MySQL服务器: 并得到最严重的错误: 我在my.cnf中添加了以下参数: 所以我可以使用终端从终端成功连接到远程mysql 因此,到mysql服务器的连接正常工作,据我了解,问题出在php / mysql合作中。可能我缺少一些参数。 不幸的是我不能使用mysqli lib,因为pdo_mysql有太多可用的适配器。

  • 我正在为自己清除一些涉及到MYSQL的远程SSL连接的信息。特别是,一旦我设置了MYSQL以启用SSL并有一个需要SSL的远程用户。 这就是我如何与需要SSL的用户远程连接(命令行)到MYSQL的方式: mysql-uMyUserName-p-h192.168.5.5-sslca/path/to/ca.pem 我的问题是:为什么我必须作为客户端提供ca.pem文件? 以下是我在服务器上安装mysq

  • 问题内容: 我在由远程MySQL数据库支持的分布式环境中部署Play应用程序。具体来说,应用程序托管在heroku上,数据库位于Amazon RDS上(尽管这实际上适用于任何远程数据库连接)。由于数据库不仅位于本地主机上,为了安全起见,我更希望通过SSL建立远程MySQL连接。 给定要信任的CA证书,只有可以验证主机证书的情况下,如何配置Play应用程序以通过SSL连接到MySQL服务器? 假定这

  • 问题内容: 我一直在localhost上建立一个网络,当我尝试在主机上移动它时,它显示了很多错误。似乎无法连接到我的本地数据库。这是代码: 这是输出: 感谢帮助 问题答案: 这是mysql用户权限问题。例如,使用phpmyadmin创建一个新用户,如果从localhost连接,则将其主机设置为localhost;如果从外部连接,则将其主机设置为%。

  • 问题内容: 如何从Java应用程序通过SSH连接到远程MySQL数据库?小代码示例对我有所帮助,对此我将不胜感激。 问题答案: 我的理解是,您想访问在远程计算机上运行的mysql服务器,并通过SSH隧道侦听端口3306。 要使用命令行ssh客户端从本地计算机上的端口1234到远程计算机上的端口3306的隧道,您可以从本地计算机上键入以下命令: 要从Java执行相同的操作,可以使用JSch(SSH2

  • 我从Java应用程序通过SSL连接到MySQL。我已经将MYSQL配置为支持SSL并生成客户端证书。我已将服务器CA证书和客户端证书导入密钥库。这就是我的代码目前的样子 我想使用带有C3p0的spring通过SSL连接到MYSQL。这是我的spring配置文件,它从jdbc读取参数。财产。 如何配置spring来设置属性verifyServerCertificate=true useSSL=tru