上一篇博客说到同一个问题,经过和朋友的研究已经参考网上的资料,现在给出一份更简洁的配置。
情景:现在单个工程中需要连接两个库,这两个库在同一个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、配置仅供参考,直接复制,可能出现异常,毕竟每个人电脑的环境不是完全相同的。
鸣谢:此博客是经过讨论和参考朋友博客完成,特此感谢在网上共享研究成果资源的朋 友。
博友对应博文友情链接:博友博文链接,点击进入