springmvc集成动态数据源

来源:互联网 发布:淘宝未按规定时间发货 编辑:程序博客网 时间:2024/06/07 05:32

  springmvc的环境已经搭建好

首先配置数据源

    这里采用oracle和mysql

<bean id="dataSourceorl" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property><property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"></property><property name="username" value="scott"></property><property name="password" value="tiger"></property></bean>    <bean id="dataSourcemysql" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/test"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><bean class="com.asiainfo.mongo.dataSource.DynamicDataSource" id="dataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry value-ref="dataSourceorl" key="orcl"></entry><entry value-ref="dataSourcemysql" key="mysql"></entry></map></property><property name="defaultTargetDataSource" ref="dataSourceorl"></property></bean>
编写动态数据源类,继承AbstractRoutingDataSource,这里是路由功能!

   

package com.asiainfo.mongo.dataSource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DbContextHolder.getDbType(); }}

编写静态类,设置数据源

 

package com.asiainfo.mongo.dataSource;public class DbContextHolder{private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();/** * 设置当前数据库。 * @param dbType */public static void setDbType(String dbType){contextHolder.set(dbType);}/** * 取得当前数据源。 * @return */public static String getDbType(){String str = (String) contextHolder.get();return str;}/** * 清除上下文数据 */public static void clearDbType(){contextHolder.remove();}}

编写测试类
package com.asiainfo.mongo.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.asiainfo.mongo.dataSource.DbContextHolder;import com.asiainfo.mongo.pojo.User;import com.asiainfo.mongo.service.interfaces.IUserSV;@Controllerpublic class UserController {@Autowiredprivate IUserSV userSv;@RequestMapping(value="addUser",method=RequestMethod.GET)    public void saveUserInfo(){DbContextHolder.setDbType("mysql");//设置数据源User user = new User();user.setUsername("曾孟良");user.setAge(25);userSv.insert(user);        }}
测试结果

 


0 0
原创粉丝点击