当我们开发saas或手机应用程序,涉及多公司时,要求每个公司使用一个数据库,如何配置spring数据源使得每个公司使用不同的数据库连接?
可以定义一个filter,在doFilter方法中调用即可达到每次请求设置的效果。至于客户端请求的公司id参数放在哪里,这个可以灵活设置,可以放在每个请求的request参数中,也可以放在cookie中
3、修改spring数据源配置
原配置(一般使用c0p3数据原的配置)
1、将公司id存放到一个ThreadLocal变量中,每次请求时设置,使得每次访问数据源可以从ThreadLocal获取当前请求所属的公司id。
/**
* 用来存放当前线程的数据
*/
public class ThreadHolder {
//公司id
private static ThreadLocal<String> localDid = new ThreadLocal<String>();
public static void putSp(String sp) {
localDid.set(sp);
}
public static String getSp() {
if (localDid.get() == null)
return "";
else
return (String)localDid.get();
}
}
2、在每次请求时调用ThreadHolder.putSp方法设置公司id。
可以定义一个filter,在doFilter方法中调用即可达到每次请求设置的效果。至于客户端请求的公司id参数放在哪里,这个可以灵活设置,可以放在每个请求的request参数中,也可以放在cookie中
3、修改spring数据源配置
原配置(一般使用c0p3数据原的配置)
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="xxxx" />
<property name="jdbcUrl" value="xxx" />
<property name="user" value="user" />
<property name="password" value="password" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="800" />
<property name="maxIdleTime" value="25000" />
<property name="acquireIncrement" value="1" />
&