Spring 多数据库连接的兑现
Spring 多数据库连接的实现
1.使用Spring的配置文件完成多数据库连接:
1.1 applicationContext.xml [spring核心配置文件]
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 知识管理数据库 --> <bean id="km_source" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=docmanager"></property> <property name="username" value="sa"></property> <property name="password" value="123"></property> </bean> <!-- 框架数据库 --> <bean id="ma_source" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=framemanager"></property> <property name="username" value="sa"></property> <property name="password" value="123"></property> <property name="maxActive" value="100000"></property> <property name="maxIdle" value="20"></property> <property name="maxWait" value="1000"></property> </bean> <!-- 用户组织数据库 --> <bean id="um_source" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=usermanager"></property> <property name="username" value="sa"></property> <property name="password" value="123"></property> </bean> <!-- 工作流数据库 --> <bean id="wfe_source" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=wfemanager"></property> <property name="username" value="sa"></property> <property name="password" value="123"></property> </bean> <bean id="myDataSource" class="com.smartcom.util.jdbcUtil.DynamicDataSource"> <property name="targetDataSources"> <map> <entry key="ma_source" value-ref="ma_source"/> <entry key="um_source" value-ref="um_source"/> </map> </property> <property name="defaultTargetDataSource" ref="km_source"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false" lazy-init="false" autowire="default"> <property name="dataSource" ref="myDataSource"/> </bean> <import resource="config/ma/beans_pojo.xml"/> <import resource="config/ma/beans_dao.xml"/> <import resource="config/ma/beans_service.xml"/> <import resource="config/ma/beans_action.xml"/> <import resource="config/ma/beans_ajax.xml"/> </beans>
1.2 JdbcContext.java [建立一个获得和设置上下文的类]
package com.smartcom.util.jdbcUtil; /** * 建立一个获得和设置上下文的类 * @author Liyongbin * 此类正在使用 */ public class JdbcContext { private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * XXXXX */ public static void setJdbcType(String jdbcType) { contextHolder.set(jdbcType); } /** * XXXXX */ public static String getJdbcType() { return (String) contextHolder.get(); } /** * 框架数据库 */ public static void setMa_source(){ setJdbcType("ma_source"); } /** * 知识管理数据库 */ public static void setKm_source(){ setJdbcType("km_source"); } /** * 知识管理数据库 */ public static void setUm_source(){ setJdbcType("um_source"); } /** * 工作流引擎数据库 */ public static void setWfe_source(){ setJdbcType("wfe_source"); } /** * 设置主连接 */ public static void setMaster(){ clearJdbcType(); } /** * 清空连接类型 */ public static void clearJdbcType() { contextHolder.remove(); } }
1.3 IGroupinfoDao.java [DAO层接口]
package com.smartcom.ma.dao; import com.smartcom.ma.pojo.Groupinfo; import com.smartcom.ma.util.IBaseDao; public interface IGroupinfoDao extends IBaseDao<Groupinfo> { }
1.4 GroupinfoDaoImpl.java [DAO层接口实现]
package com.smartcom.ma.dao.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import com.smartcom.ma.dao.IGroupinfoDao; import com.smartcom.ma.pojo.Groupinfo; import com.smartcom.util.jdbcUtil.JdbcContext; public class GroupinfoDaoImpl implements IGroupinfoDao { private Groupinfo groupinfo ; private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public Groupinfo getGroupinfo() { return groupinfo; } public void setGroupinfo(Groupinfo groupinfo) { this.groupinfo = groupinfo; } /** * 【查询】所有部门职位信息 * @author Liyongbin [May 4, 2012 8:17:20 PM] */ @SuppressWarnings("unchecked") public List<Groupinfo> findAll() throws Exception { JdbcContext.setUm_source();//设置数据源 List<Groupinfo> groupList = new ArrayList<Groupinfo>(); Groupinfo groupinfo = null; String sql ="select sys_id,sys_createtime,sys_creator,g_name,g_code,parentId,uuid,"; sql += "g_level,g_state,sys_type,g_type,g_desc,own_subject,remark from groupinfo "; sql += "order by sid"; try { List rows=jdbcTemplate.queryForList(sql); Iterator it=rows.iterator(); while(it.hasNext()){ Map groupMap=(Map)it.next(); groupinfo = new Groupinfo(); groupinfo.setSys_id((Integer)groupMap.get("sys_id")); groupinfo.setSys_createtime(groupMap.get("sys_createtime").toString()); groupinfo.setSys_creator((String)groupMap.get("sys_creator")); groupinfo.setG_name((String)groupMap.get("g_name")); groupinfo.setG_code((String)groupMap.get("g_code")); groupinfo.setParentId((String)groupMap.get("parentId")); groupinfo.setUuid((String)groupMap.get("uuid")); groupinfo.setG_level((Integer)groupMap.get("g_level")); groupinfo.setG_state((Integer)groupMap.get("g_state")); groupinfo.setSys_type((Integer)groupMap.get("sys_type")); groupinfo.setG_type((Integer)groupMap.get("g_type")); groupinfo.setG_desc((String)groupMap.get("g_desc")); groupinfo.setOwn_subject((Integer)groupMap.get("own_subject")); groupinfo.setRemark((String)groupMap.get("remark")); groupList.add(groupinfo); } } catch (Exception e) { e.printStackTrace(); } return groupList; } /** * 【新建】部门职位 * @author Liyongbin [May 5, 2012 8:02:24 AM] */ public int save(Groupinfo groupinfo) throws Exception { Object [] args = null; int ret = -1; if(null==groupinfo){ return ret; } String sql ="insert into groupinfo (sys_id,sys_createtime,sys_creator,g_name,g_code,parentId,uuid,g_level,g_state,sys_type,g_type,g_desc,own_subject,remark)"; sql +=" values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; try { args = new Object[13]; args[0] = groupinfo.getSys_id(); args[1] = groupinfo.getSys_createtime(); args[2] = groupinfo.getSys_creator(); args[3] = groupinfo.getG_name(); args[4] = groupinfo.getG_code(); args[5] = groupinfo.getParentId(); args[6] = groupinfo.getUuid(); args[7] = groupinfo.getG_level(); args[8] = groupinfo.getG_state(); args[9] = groupinfo.getSys_type(); args[10]= groupinfo.getG_type(); args[11]= groupinfo.getG_desc(); args[12]= groupinfo.getOwn_subject(); args[13]= groupinfo.getRemark(); ret = jdbcTemplate.update(sql, args); } catch (Exception e) { System.out.println(e.getMessage()); } return ret; } /** * 【删除】部门职位 * @author Liyongbin [May 19, 2012 6:58:41 AM] */ public int delete(int id) throws Exception { Integer ret = -1; String sql = "delete from groupinfo where sys_id=?"; try { ret = jdbcTemplate.update(sql,new Object[]{id}); } catch (Exception e) { System.out.println(e.getMessage()); } return ret; } /** * 【查询】部门职位-->sysId * @author Liyongbin [May 4, 2012 8:17:20 PM] */ @SuppressWarnings("unchecked") public Groupinfo findById(int id) throws Exception { JdbcContext.setUm_source();//设置数据源 Groupinfo groupinfo = null; String sql ="select sys_id,sys_createtime,sys_creator,g_name,g_code,parentId,uuid,"; sql += "g_level,g_state,sys_type,g_type,g_desc,own_subject,remark from groupinfo"; try { List rows=jdbcTemplate.queryForList(sql); Iterator it=rows.iterator(); if(it.hasNext()){ Map groupMap=(Map)it.next(); groupinfo = new Groupinfo(); groupinfo.setSys_id((Integer)groupMap.get("sys_id")); groupinfo.setSys_createtime(groupMap.get("sys_createtime").toString()); groupinfo.setSys_creator((String)groupMap.get("sys_creator")); groupinfo.setG_name((String)groupMap.get("g_name")); groupinfo.setG_code((String)groupMap.get("g_code")); groupinfo.setParentId((String)groupMap.get("parentId")); groupinfo.setUuid((String)groupMap.get("uuid")); groupinfo.setG_level((Integer)groupMap.get("g_level")); groupinfo.setG_state((Integer)groupMap.get("g_state")); groupinfo.setSys_type((Integer)groupMap.get("sys_type")); groupinfo.setG_type((Integer)groupMap.get("g_type")); groupinfo.setG_desc((String)groupMap.get("g_desc")); groupinfo.setOwn_subject((Integer)groupMap.get("own_subject")); groupinfo.setRemark((String)groupMap.get("remark")); } } catch (Exception e) { e.printStackTrace(); } return groupinfo; } /** * 【修改】部门职位 * @author Liyongbin [May 5, 2012 8:02:24 AM] */ public int update(Groupinfo groupinfo) throws Exception { int ret = -1; Object [] args = null; String sql = "update groupinfo set sys_createtime=?,sys_creator=?,g_name=?,g_code=?,parentId=?,uuid=?,"; sql += "g_level=?,g_state=?,sys_type=?,g_type=?,g_desc=?,own_subject=?,remark=?"; sql += "where sys_id=? "; try { args = new Object[14]; args[0] = groupinfo.getSys_createtime(); args[1] = groupinfo.getSys_creator(); args[2] = groupinfo.getG_name(); args[3] = groupinfo.getG_code(); args[4] = groupinfo.getParentId(); args[5] = groupinfo.getUuid(); args[6] = groupinfo.getG_level(); args[7] = groupinfo.getG_state(); args[8] = groupinfo.getSys_type(); args[9]= groupinfo.getG_type(); args[10]= groupinfo.getG_desc(); args[11]= groupinfo.getOwn_subject(); args[12]= groupinfo.getRemark(); args[13]= groupinfo.getSys_id(); ret = jdbcTemplate.update(sql,args); } catch (Exception e) { System.out.println(e.getMessage()); } return ret; } }