首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过SSL的Spring启动远程Mysql连接

通过SSL的Spring启动远程Mysql连接
EN

Stack Overflow用户
提问于 2018-01-23 01:01:16
回答 1查看 2.5K关注 0票数 1

我有一个远程MySQL数据库服务器,需要连接到运行在本地的Spring应用程序。

在Spring应用程序加载之前,它从使用远程服务器的ssh隧道开始。

这里是主要的应用程序代码,它首先创建和ssh隧道,然后启动主应用程序。

代码语言:javascript
运行
AI代码解释
复制
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);
}

}

但是我的application.properties文件是空的,可能是故障点。

它给出了使用空application.properties的错误:

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

我应该在spring.datasource.url中给出application.properties值什么?或者其他建议?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 05:54:00

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

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

像这样的东西会管用的。

代码语言:javascript
运行
AI代码解释
复制
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();
       }
    }
}

通过这种方式,您可以使用Spring来配置和管理隧道。如果您愿意,甚至可以在特定的环境中设置它的条件。在进行本地开发时,不设隧道,并使其能用于测试和生产环境。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48397716

复制
相关文章
MultiQC对FastQC结果的解读
FastQC是一款能够对高通量测序数据进行质量评估的软件,对每一个样本生成一个报告。
小汪Waud
2023/02/16
2.8K0
MultiQC对FastQC结果的解读
Flink 使用窗口结果
窗口操作的结果还是一个DataStream,没有保留的信息窗口的操作结果元素,没有关于窗口操作的信息被保留在结果元素中,所以如果你想保留关于窗口的元信息,你必须手动将这些信息编码到ProcessWindowFunction的结果元素中。在结果元素上设置的唯一相关信息是元素时间戳。它被设置为已处理窗口允许的最大时间戳,即结束时间戳- 1,因为窗口结束时间戳是排他的。注意,这对于事件时间窗口和处理时间窗口都是正确的。例如,在一个窗口操作元素之后总是有一个时间戳,但这可以是一个事件时间戳或一个处理时间戳。对于处理时间窗口,这没有特别的含义,但是对于事件时间窗口,这一点以及水印与窗口的交互方式使得具有相同窗口大小的连续窗口操作成为可能。我们将在看了水印如何与窗口交互之后介绍这一点。
前Thoughtworks-杨焱
2021/12/07
3540
由type()函数对类和实例使用结果差
在python2中得到的结果 (<type 'classobj'>, <type 'instance'>) a是一个类对象,a1是一个实例
py3study
2020/01/02
5110
Jepsen对etcd 3.4.3测试的最新结果
Jepsen对etcd 3.4.3进行了测试和分析,得到了良好的结果和有用的反馈。
CNCF
2020/02/20
1.2K0
Jepsen对etcd 3.4.3测试的最新结果
ROC阳性结果还是阴性结果?
关于ROC曲线的内容很重要,无论是在医学统计、机器学习,还是临床预测模型中,都是很重要的内容,大家务必要掌握!
医学和生信笔记
2023/02/14
5200
MySQL | 如何对查询结果集进行排序
数据操作语言:结果集排序 如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY 子句。 SELECT ...... FROM ...... ORDER BY 列名 [ASC | DESC]; SELECT ename,sal FROM t_emp ORDER BY sal; SELECT empno,ename,sal,deptno FROM t_emp ORDER BY sal DESC; 排序关键字 ASC 代表升序(默认),DESC
Zkeq
2022/05/18
6.5K0
MySQL | 如何对查询结果集进行排序
Struts2学习---result结果集 result type:全局结果集:动态结果集带有参数的结果集
这一章节主要介绍如何配置结果集,分为以下几个知识点: 结果集类型(result type) 全局结果集(global types) 动态结果集(dynamic type) 带有参数的结果集(type with params) result type: 结果集类型一共有十一种: dispatcher redirect chain redirectAction freemarker httpheader stream velocity xslt plaintext tiles 最常用的是前两种:一个是请求转发
MindMrWang
2018/04/16
1.8K0
[每日一题]投资结果
给定一个列表funds表示投资人每次的投资额。现在有三个公司A, B, C,它们的初始资金分别为a,b,c。投资人每次投资时会对当前资金最少的公司进行投资(当有多个公司资金相同时,投资人会对编号最小的公司进行投资)。返回A, B, C三家公司最后的资金。
呼延十
2019/07/01
5540
对mysql left join 出现的重复结果去重
简单说明问题出现的原因: MySQL left join 语句格式为: A LEFT JOIN B ON 条件表达式
马哥Python
2019/06/27
18.7K0
如何从结果集中获得随机结果
全表扫描(Full table Scan) 全表扫描返回表中所有的记录。 执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读. 每个数据块Oracle只读一次.
数据和云01
2018/09/10
1.6K0
使用Java对返回的结果,封装成指定JSON格式的数据类型
1、如果任务下来了,并且给定了你指定格式的JSON数据类型,那么就要想法封装成此种JSON格式的数据类型,方便其他成员进行调用,那么是如何进行封装的呢,这里简单研究一下子。
别先生
2020/03/19
4.4K0
使用作者代码重复结果
第三单元第十二+十三讲:使用作者代码重复结果 课程链接在:http://jm.grazy.cn/index/mulitcourse/detail.html?cid=53 这一篇会是代码密集型,因为原文
生信技能树jimmy
2020/03/30
1.8K0
中美谈判结果对锂电产生的危机与机遇
近日,由美国高官组成的谈判团队访华,就近来发生的贸易战与我国展开谈判。中美经贸磋商的结果是,双方在有些领域达成了一些共识,但在一些问题上还存在较大分歧。显然,一场由美国发起的针对“中国制造2025”的贸易战并不会就此停歇下来。但是,在这此贸易战中,“中兴事件”引发业界地震,而随后美国又将矛头指向华为……中兴被禁等事件,揭露了中国制造业缺乏核心技术的缺点,触动了国人的神经。从这些事件中,作为中国制造2025的关键行业——新能源汽车,为避免“扎心”,动力锂电池也要谨防危机发生,积极寻找出路。
SHOUT
2022/05/31
4500
中美谈判结果对锂电产生的危机与机遇
Oracle Union Union All 对查询结果集操作
在Oracle中提供了三种类型的集合操作: 并(UNION)、交(INTERSECT)、差(MINUS)
翎野君
2023/05/12
6360
Oracle Union Union All 对查询结果集操作
基于TSUNG对MQTT进行压力测试-测试结果
https://www.cnblogs.com/lingyejun/p/7898873.html
翎野君
2023/05/12
4440
基于TSUNG对MQTT进行压力测试-测试结果
用SQL对经过排名的结果集进行转置
        想对表中的值进行排名,然后将结果集转置为 3 列。这样做旨在分别显示前 3 名、接下来的 3 名以及其余各行记录。例如,表中记录如下:
用户1148526
2022/11/12
1.1K0
同步定时器对性能测试结果的影响分析
同步定时器其作用是:阻塞线程,直到达到指定的线程数量后,才一起释放,可以瞬间产生很大的压力。
谭银
2021/07/21
1.5K0
同步定时器对性能测试结果的影响分析
点击加载更多

相似问题

由Oracle Scheduler启动的干净结束plsql过程

21

继承类型问题:是否有一个干净的解决方案?

20

是否有更干净的方法来实现多模型的曲线拟合?

21

是否可以在纯ColdFusion解决方案中实现干净的URL?

29

在Java中,是否有一种更干净的方法来实现if语句?

76
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档