搭建基于springmvc,ibatis的工程实现读写分离,配置分离
实现读写分离:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 主数据源 -->
<bean id="myDataSourceMaster" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--从数据源-->
<bean id="myDataSourceSlave" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean> <bean id="sqlMapClientReader" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map-config.xml" />
<property name="dataSource" ref="myDataSourceSlave" />
</bean> <bean id="sqlMapClientWriter" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map-config.xml" />
<property name="dataSource" ref="myDataSourceMaster" />
</bean> <!-- 操作数据库的基类 -->
<bean id="ibatisBaseDao" class="com.zzcm.ad.common.dao.impl.IbatisBaseDaoImpl">
<property name="ibatisDaoReader">
<bean id="ibatisDaoReader" class="com.zzcm.ad.common.dao.impl.IbatisDaoReaderImpl"></bean>
</property>
<property name="ibatisDaoWriter">
<bean id="ibatisDaoWriter" class="com.zzcm.ad.common.dao.impl.IbatisDaoWriterImpl"/>
</property>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 加载属性文件 -->
<bean id="propertyConfig" class="com.zzcm.ad.util.spring.PropertyAnnotationPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:${global_config_path}/4gad/jdbc.properties</value>
<value>file:${global_config_path}/4gad/support.properties</value>
</list>
</property>
</bean> <import resource="spring/spring-dataResources.xml"/>
<context:component-scan base-package="com.zzcm.ad"/> <!-- 添加注解驱动 -->
<mvc:annotation-driven/>
<!-- 允许对静态资源文件的访问 -->
<mvc:default-servlet-handler/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
package com.zzcm.ad.common.dao;
public interface IbatisBaseDao extends IbatisDaoReader,IbatisDaoWriter{
}
package com.zzcm.ad.common.dao;
import java.util.List;
import java.util.Map;
public interface IbatisDaoReader{
/**
* 根据statementName查询,返回对象
* @param statementName
* @return
*/
public abstract <T> T queryForObject(String statementName);
/**
* 根据statementName,参数obj查询,返回对象
* @param statementName
* @param obj
* @return
*/
public abstract <T> T queryForObject(String statementName, Object obj);
/**
* 根据statementName查询,返回对象集合List
* @param statementName
* @return
*/
public abstract <T> List<T> queryForList(String statementName);
/**
* 根据statementName,参数obj查询,返回对象集合List
* @param statementName
* @param obj
* @return
*/
public abstract <T> List<T> queryForList(String statementName, Object obj);
/**
* 根据statementName,参数obj,返回Map key值查询,返回Map
* @param statementName
* @param obj
* @param keyProperty
* @return
*/
public abstract <T> Map queryForMap(String statementName,Object obj, String keyProperty);
/**
* 根据statementName、参数obj、返回Map key值、返回map value查询,返回Map
* @param statementName
* @param obj
* @param keyProperty
* @param valueProperty
* @return
*/
public abstract <T> Map queryForMap(String statementName,Object obj, String keyProperty,String valueProperty);
}
package com.zzcm.ad.common.dao;
import com.zzcm.ad.common.exception.JdbcException;
public interface IbatisDaoWriter{
/**
* 保存一个实体对象
* @param statementName
* @param entity
* @return
* @throws JdbcException
*/
public abstract Integer save(String statementName,Object obj) throws JdbcException;
/**
* 保存
* @param statementName
* @return
* @throws JdbcException
*/
public abstract Integer save(String statementName) throws JdbcException;
/**
* 更新一个实体对象
* @param statementName
* @param entity
* @return
* @throws JdbcException
*/
public abstract int update(String statementName,Object obj) throws JdbcException;
/**
* 更新
* @param statementName
* @param entity
* @return
* @throws JdbcException
*/
public abstract int update(String statementName) throws JdbcException;
/**
* 按照条件删除记录
* @param statementName
* @param paramObj
* @return
* @throws JdbcException
*/
public abstract int delete(String statementName,Object obj) throws JdbcException;
/**
* 按照条件删除记录
* @param statementName
* @return
* @throws JdbcException
*/
public abstract int delete(String statementName) throws JdbcException; }
package com.zzcm.ad.common.dao.impl;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.util.Assert;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.zzcm.ad.common.dao.IbatisDaoReader;
import com.zzcm.ad.common.exception.JdbcException;
/**
* 对数据库读操作的实现类
* @author shunyang
*
*/
public final class IbatisDaoReaderImpl extends SqlMapClientDaoSupport implements IbatisDaoReader {
private static final Logger logger = LoggerFactory.getLogger(IbatisDaoReaderImpl.class);
@Resource(name="sqlMapClientReader")
private SqlMapClient sqlMapClientReader;
@PostConstruct
public void initSqlMapClient(){
super.setSqlMapClient(sqlMapClientReader);
} @SuppressWarnings("unchecked")
@Override
public <T> T queryForObject(String statementName) throws JdbcException{
Assert.notNull(statementName);
try {
return (T) this.getSqlMapClientTemplate().queryForObject(statementName);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public <T> T queryForObject(String statementName, Object obj) {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return (T) this.getSqlMapClientTemplate().queryForObject(statementName,obj);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("param:"+obj.getClass().getName());
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public <T> List<T> queryForList(String statementName) {
Assert.notNull(statementName);
try {
return (List<T>) this.getSqlMapClientTemplate().queryForList(statementName);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public <T> List<T> queryForList(String statementName, Object obj) {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return (List<T>) this.getSqlMapClientTemplate().queryForList(statementName,obj);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("statementName:"+statementName);
logger.error("param:"+obj.getClass().getName());
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public <T> Map queryForMap(String statementName, Object obj,String keyProperty) {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return this.getSqlMapClientTemplate().queryForMap(statementName, obj, keyProperty);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("statementName:"+statementName);
logger.error("param:"+obj.getClass().getName()+"--->keyProperty:"+keyProperty);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public <T> Map queryForMap(String statementName, Object obj,String keyProperty, String valueProperty) {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return this.getSqlMapClientTemplate().queryForMap(statementName, obj, keyProperty, valueProperty);
} catch (Exception e) {
logger.error("Something's wrong when query :");
logger.error("statementName:"+statementName);
logger.error("param:"+obj.getClass().getName()+"--->keyProperty:"+keyProperty+"-->valueProperty:"+valueProperty);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
}
package com.zzcm.ad.common.dao.impl;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.util.Assert;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.zzcm.ad.common.dao.IbatisDaoWriter;
import com.zzcm.ad.common.exception.JdbcException;
/**
* 对数据库写操作的实现类
* @author shunyang
*
*/
public final class IbatisDaoWriterImpl extends SqlMapClientDaoSupport implements IbatisDaoWriter {
private static final Logger logger = LoggerFactory.getLogger(IbatisDaoReaderImpl.class);
@Resource(name = "sqlMapClientWriter")
private SqlMapClient sqlMapClientWriter;
@PostConstruct
public void initSqlMapClient(){
super.setSqlMapClient(sqlMapClientWriter);
} public Integer save(String statementName,Object obj) {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return (Integer) this.getSqlMapClientTemplate().insert(statementName, obj);
} catch (Exception e) {
logger.error("Something's wrong when save Object:");
logger.error(obj.getClass().getName());
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public Integer save(String statementName) throws JdbcException {
Assert.notNull(statementName);
try {
return (Integer) this.getSqlMapClientTemplate().insert(statementName);
} catch (Exception e) {
logger.error("Something's wrong when save Object:");
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
} @Override
public int update(String statementName, Object obj)
throws JdbcException {
Assert.notNull(statementName);
Assert.notNull(obj);
try {
return (Integer) this.getSqlMapClientTemplate().update(statementName, obj);
} catch (Exception e) {
logger.error("Something's wrong when update Object:");
logger.error(obj.getClass().getName());
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public int update(String statementName) throws JdbcException {
Assert.notNull(statementName);
try {
return (Integer) this.getSqlMapClientTemplate().update(statementName);
} catch (Exception e) {
logger.error("Something's wrong when update Object:");
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public int delete(String statementName) throws JdbcException {
Assert.notNull(statementName);
try {
return this.getSqlMapClientTemplate().delete(statementName);
} catch (Exception e) {
logger.error("Something's wrong when delete Object:");
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
@Override
public int delete(String statementName, Object obj)
throws JdbcException {
Assert.notNull(statementName);
try {
return this.getSqlMapClientTemplate().delete(statementName,obj);
} catch (Exception e) {
logger.error("Something's wrong when delete Object:");
logger.error(obj.getClass().getName());
logger.error("statementName:"+statementName);
throw new JdbcException(this.getClass() + "->" + e.getMessage(), e);
}
}
}
package com.zzcm.ad.common.dao.impl;
import java.util.List;
import java.util.Map;
import com.zzcm.ad.common.dao.IbatisBaseDao;
import com.zzcm.ad.common.dao.IbatisDaoReader;
import com.zzcm.ad.common.dao.IbatisDaoWriter;
import com.zzcm.ad.common.exception.JdbcException;
/**
* 对数据库操作的基础类,实现了读写分离
* @author shunyang
*
*/
public class IbatisBaseDaoImpl implements IbatisBaseDao {
private IbatisDaoReader ibatisDaoReader;
private IbatisDaoWriter ibatisDaoWriter; public IbatisDaoReader getIbatisDaoReader() {
return ibatisDaoReader;
}
public void setIbatisDaoReader(IbatisDaoReader ibatisDaoReader) {
this.ibatisDaoReader = ibatisDaoReader;
}
public IbatisDaoWriter getIbatisDaoWriter() {
return ibatisDaoWriter;
}
public void setIbatisDaoWriter(IbatisDaoWriter ibatisDaoWriter) {
this.ibatisDaoWriter = ibatisDaoWriter;
}
@Override
public Integer save(String statementName, Object obj)throws JdbcException {
return ibatisDaoWriter.save(statementName, obj);
}
@Override
public Integer save(String statementName) throws JdbcException {
return ibatisDaoWriter.save(statementName);
}
@Override
public int update(String statementName, Object obj) throws JdbcException {
return ibatisDaoWriter.update(statementName, obj);
}
@Override
public int update(String statementName) throws JdbcException {
return ibatisDaoWriter.update(statementName);
}
@Override
public int delete(String statementName, Object obj)throws JdbcException {
return ibatisDaoWriter.delete(statementName,obj);
}
@Override
public int delete(String statementName) throws JdbcException {
return ibatisDaoWriter.delete(statementName);
}
@Override
public <T> T queryForObject(String statementName) {
return ibatisDaoReader.queryForObject(statementName);
}
@Override
public <T> T queryForObject(String statementName, Object obj) {
return ibatisDaoReader.queryForObject(statementName, obj);
}
@Override
public <T> List<T> queryForList(String statementName) {
return ibatisDaoReader.queryForList(statementName);
}
@Override
public <T> List<T> queryForList(String statementName, Object obj) {
return ibatisDaoReader.queryForList(statementName, obj);
}
@Override
public <T> Map queryForMap(String statementName, Object obj,
String keyProperty) {
return ibatisDaoReader.queryForMap(statementName, obj, keyProperty);
}
@Override
public <T> Map queryForMap(String statementName, Object obj,
String keyProperty, String valueProperty) {
return ibatisDaoReader.queryForMap(statementName, obj, keyProperty, valueProperty);
}
}
#数据库连接的方式,请根据你的项目中现有的情况配置
jdbc.driverClassName=com.mysql.jdbc.Driver #数据连接URL,请根据你的项目中现有的情况配置
jdbc.url=jdbc:mysql://idctest.mysql.xxx.com:3306/zzsupport #数据库连接的用户名,请根据你的项目中现有的情况配置
jdbc.username=zzmanager #数据库连接的密码(带“.encrypt”与否都可以,但是带“.encrypt”的密码必须加密),请根据你的项目中现有的情况配置
#jdbc.password.encrypt=2dUGTjehnpU.
jdbc.password=iadMOB-2013@0622)
support.properties
#开发环境
upload.path=D:/apache-tomcat-6.0.30/webapps/zzupload-main
upload.url=http://192.168.0.88:8080/zzupload-main
搭建基于springmvc,ibatis的工程实现读写分离,配置分离的更多相关文章
- IDEA搭建基于maven的springboot工程
---恢复内容开始--- 基础环境:IntelliJ IDEA 2018.1.6 x64.JDK1.8 一.创建maven 填写包名.项目名 选择对应的本地maven 默认过来的project nam ...
- CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式
Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性.服务端基于Spring Boot ...
- Ubuntu 16.04下搭建基于携程Apollo(阿波罗)配置中心单机模式
官网:https://github.com/ctripcorp/apollo Wiki:https://github.com/ctripcorp/apollo/wiki(一切的集成方式和使用方法都在这 ...
- Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战
1. Dubbo简介 Dubbo是Alibaba开源的分布式框架,是RPC模式的一种成熟的框架,优点是可以与Spring无缝集成,应用到我们的后台程序中.具体介绍可以查看Dubbo官网. 2. Why ...
- springMVC用法 以及一个简单的基于springMVC hibernate spring的配置
替代struts 1 web.xml中配置springmvc中央控制器 <?xml version="1.0" encoding="UTF-8"?> ...
- 十六、.net core(.NET 6)搭建基于Redis的Hangfire定时器
搭建基于Redis的Hangfire定时器 Hangfire的定时配置信息会自动生成在指定到数据库内,包括关系型数据库或非关系型数据库内.目前为止,它在Redis.Oracle上面,可以支持最短15秒 ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
- 搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境
搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境 最近有很多人不知道如何搭建基于SSI(struts2,spring,ibatis)的J2EE开发环境,这里给大家一个 ...
- 搭建基于MySQL的读写分离工具Amoeba
搭建基于MySQL的读写分离工具Amoeba: Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的: 实验环境(虚拟机): 主机 角色 10.10.10.2 ...
随机推荐
- 勾选Create git respository的作用
在Xcode中创建项目时会弹出Source Control选项,勾选Create git repository选项可以帮助我们对照以前项目中代码中修改的部分,为开发提供方便. 在项目完成到一定程度时, ...
- JavaScript两种方法来定义一个函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Quartz使用-入门使用(java定时任务实现)
注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...
- jQuery基础---Ajax进阶
原文:jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一 ...
- Android SDK 2.2 离线安装
android的普通安装方法非常easy,不必多说. 因为普通安装方法速度非常慢,对一般的用户要数小时的时间等待. 为更高速安装,能够採取离线安装方法.即,先分别下载所需包,再安装. 一,首先下载SD ...
- Java之IO流基础流对象
输入流和输出流是相对于内存设备而言 即将外设中的数据读取到内存中就是输入 将内存中的数据写入到外设中就是输出 字符流的由来: 其实就是:字节流读取文字字节数据后,不直接操作而是先查指 ...
- 安卓MonkeyRunner源码分析之与Android设备通讯方式
如前文<谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析>所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目 ...
- 创建android phonegap项目
一. 首先需要在Eclipse中创建一个Android项目 打开Eclipse,打开File->New->Project 选择Android Application Project点击Ne ...
- 快速构建Windows 8风格应用15-ShareContract构建
原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...
- vsphere client 虚拟机安装操系统
vSphere 是 VMware 推出的基于云计算的新一代数据中心虚拟化套件,提供了虚拟化基础架构.高可用性.集中管理.监控等一整套解决方案. VMware ESXi 是VMware vSphere ...