spring实现druid使用ssh连接数据库

在开发过程中,由于数据安全管理需要,mysql等重要数据库往往只允许主机后内网地址访问,程序连接时只能用ssh连接,以下为spring框中ssh连接mysql思路与方案
1.引入ssh代理jar

<dependency>
		    <groupId>com.jcraft</groupId>
		    <artifactId>jsch</artifactId>
		    <version>0.1.55</version>
</dependency>

2.重载BeanPostProcessor类,在druid连接数据库前设置ssh隧道,druid连接时使用ssh隧道进行mysql连接。注意spring框架中初始化化com.alibaba.druid.pool.DruidDataSource前,程序将进行mysql连接初始化,将要在初始化前设置ssh隧道;
3.设置ssh隧道,先查询druid连接数据的bean名字
在这里插入图片描述
示例中连接msyql的配置文件bean名字为dataSource_jeecg
在程序中新BeanPostProcessor类

package com.jeecg.commons.web;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
@Component
public class MyBeanPostProcessor implements BeanPostProcessor{
	/* 
	 * 本方法一定要返回bean对象
	 */
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		if("dataSource_jeecg".equals(beanName)) {			
			System.out.println(beanName+"对象初始化前...");
			ssh();
		}
		return bean;
	}

	/* 
	 * 本方法一定要返回bean对象
	 */
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}
	//本地端口,对应jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=UTF-8中的3306
	public static final int lmport=3306;
	public static final int rmport=3306;//mysql端口
	public static String rhost="192.168.158.1";//服务器host
	public static int rport=22;//服务器ssh的port
	public static String rusername="root";//服务器username
	public static String rpassword="abcde";//服务器password
	/**
	 * 配置SSH
	 */
	public static void ssh() {  
        try {  
            JSch jsch = new JSch();  
            Session session = jsch.getSession(rusername, rhost, rport);  
            session.setPassword(rpassword);  
            session.setConfig("StrictHostKeyChecking", "no");  
            session.connect();  
            System.out.println(session.getServerVersion());//这里打印SSH服务器版本信息  
  
            int assinged_port = session.setPortForwardingL(lmport, rhost, rmport);//端口映射 转发  数据库服务器地址url
            System.out.println("localhost:" + assinged_port);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }
}

4.mysql配置改为jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=UTF-8,隧道配置完成

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring框架进行Web开发时,我们经常会用到Druid连接池作为数据库连接池。有时我们需要同时连接多个数据库,那么如何在Druid配置多个数据库呢? 首先,我们需要在application.properties或application.yml配置文件中添加多个数据库连接信息,如下所示: ```properties # 第一个数据库连接 spring.datasource.url=jdbc:mysql://localhost:3306/test1 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 第二个数据库连接 spring.datasource.test2.url=jdbc:mysql://localhost:3306/test2 spring.datasource.test2.username=root spring.datasource.test2.password=123456 spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver ``` 其中,第一个数据库连接的配置信息是默认的,而第二个数据库连接的配置信息前缀为`test2`。这样,我们就成功配置了两个不同的数据库连接。 接下来,我们需要在Druid配置类中进行对应的配置。假设我们的Druid配置类名为`DruidConfig`,那么我们可以在该类中添加下面的两个`@Bean`注解: ```java @Configuration public class DruidConfig { // 第一个数据库连接 @Bean(name = "dataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DruidDataSourceBuilder.create().build(); } // 第二个数据库连接 @Bean(name = "test2DataSource") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource test2DataSource() { return DruidDataSourceBuilder.create().build(); } } ``` 其中,`@Bean`注解的`name`属性分别对应两个连接的名字,而`@ConfigurationProperties`注解的`prefix`属性则分别对应配置文件中的前缀。 最后,在需要使用的地方,我们可以通过`@Qualifier`注解来指定需要使用哪个数据库连接: ```java @Service public class UserServiceImpl implements UserService { @Autowired @Qualifier("dataSource") private DataSource dataSource; @Autowired @Qualifier("test2DataSource") private DataSource test2DataSource; // ... } ``` 通过以上步骤,我们就成功地在Druid配置了多个数据库连接。这样,我们就可以方便地同时访问多个不同的数据库了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值