Spring多数据源XML配置
目录
- 1 Spring中XML配置多数据源
- 1.1 传统方式
- 1.2 使用AbstractRoutingDataSource实现
1 Spring中XML配置多数据源
点击了解SpringBoot多数据源配置
1.1 传统方式
配置文件
classpath:config.properties
配置数据源
添加sessionFactory
使用双数据库 dao层
1.2 使用AbstractRoutingDataSource实现
由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。
具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑
数据源的名称常量类
public class DataSourceConst {
public static final String Admin="12";
public static final String User = "123";
}
建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal(); // 线程本地环境
// 设置数据源类型
public static void setDataSourceType(String dataSourceType) { contextHolder.set(dataSourceType);
}
// 获取数据源类型
public static String getDataSourceType() {
return (String) contextHolder.get();
}
// 清除数据源类型
public static void clearDataSourceType () {
contextHolder.remove();
}
}
建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
}
}
编写spring的配置文件配置多个数据源
root
root
jdbc:mysql://localhost:3306/test
jdbc:mysql://localhost:3306/test2
com/frogking/entity/User.hbm.xml
com/frogking/entity/Admin.hbm.xml
org.hibernate.dialect.MySQLDialect
true
false
false
2
true
删除Hibernate中表的配置文件catalog,他会自动匹配数据库如果指定catalog匹配将不启用
<?xml version="1.0" encoding="utf-8"?>