单个工程中Spring+Mybatis连接多个数据库的配置(个人分享版本)

上一篇博客说到同一个问题,经过和朋友的研究已经参考网上的资料,现在给出一份更简洁的配置。

情景:现在单个工程中需要连接两个库,这两个库在同一个mysql中,两个库都需要进行读写。

解决:

第一步:将spring和mybatis整合,这个过程就不具体演示了,在这个过程中创建了直接使用的五个配置文件、两个类、一个标识。

五个配置文件:

jdbc.propertis(数据库连接信息)

applicationContext.xml(spring的核心配置文件)

applicationContext-transaction.xml(spring事务管理配置文件)

mybatis-config.xml(mybatis的核心配置文件)

applicationContext-mybatis.xml(spring和mybatis整合的配置文件)

两个类:

DataSourceContextHolder.java

DynamicDataSource.java

一个标识:

实体类和数据库表的对应。

第二步:jdbc.properties数据连接信息配置

 

#users用户信息对应的数据库
users.jdbc.driver=com.mysql.jdbc.Driver
users.jdbc.url=jdbc:mysql://127.0.0.1:3306/users?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
users.jdbc.username=root
users.jdbc.password=123456
 
#product商品信息对应的数据库
product.jdbc.driver=com.mysql.jdbc.Driver
product.jdbc.url=jdbc:mysql://127.0.0.1:3306/product?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
product.jdbc.username=root
product.jdbc.password=123456

 

 

第三步:applicationContext.xml核心配置文件内容如下

 




	
	
		
		
		
		
		
		
			
				classpath:jdbc.properties
			
		
	

	

	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	



	
	
		
			
				
				
			
		

		
		
	

 

 

 

第四步:application-transaction.xml,spring事务管理配置文件 

 



	
	
		
		
	

	
	
		
			
			
			
			
		
	

	
		
		
		
		
	


第五步:mybatis-config.xml,mybatis核心配置文件

 

 




	
		
		
	

 

 

 

第六步:applicationContex-mybatis.xml,spring和mybatis整合配置文件

 




	
	
		
		
		
		
		
		
		
		
	
	
	
		
	

 

 

 

 

 

 

 

 

第七步:创建两个类,放到com.millery.utils包中

DataSourceContextHolder类:

 

 

package com.millery.utils;
public class DataSourceContextHolder {
    private static final ThreadLocal contextHolder = new ThreadLocal();
    public static void setDbType(String dbType) {
        contextHolder.set(dbType);
    }
    public static String getDbType() {
        return ((String) contextHolder.get());
    }
    public static void clearDbType() {
        contextHolder.remove();
    }
}


DynamicDataSource类:

 

 

package com.millery.utils;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDbType();
    }
}


第八步:关键的一步,一个标识,在设置动态数据源的时候,连接了两个库,但是在怎 么确定每次连接都是需要连接的数据库呢,那就要这个标识了。

 

假设users数据库中有一张表交user,这张表对应到java代码中有个实体类。在实体类中我们都要加注解@Table(name=”表名”),此时的表名不能再直接写user,而是写users.user(数据库名.数据表),这里的数据库名就是关键的一个标识。如果现在product数据库中有一个item数据表,此时同上面的一样,加上product数据库的标识即可。

 

最后一步:就是写一个测试的类进行测试,这里就偷个懒不写,读者根据自己的需求写。

注意:

1、此配置是通过讨论测试成功的方案,比之前的个人版本更优化,配置更简洁,如果有更多的数据库连接,只需要在spring核心配置文件中添加一个数据源,然后配置到动态数据源中即可;

2、配置仅供参考,直接复制,可能出现异常,毕竟每个人电脑的环境不是完全相同的。

鸣谢:此博客是经过讨论和参考朋友博客完成,特此感谢在网上共享研究成果资源的朋 友。

微信公众号

微信公众号

博友对应博文友情链接:博友博文链接,点击进入

你可能感兴趣的:(技术文档,Spring,MySql数据库,Mybatis)