运行本demo,需要在mysql中创建如下表:
CREATE TABLE `account` ( `ACC_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `ACC_FIRST_NAME` varchar(50) COLLATE utf8_bin DEFAULT NULL, `ACC_LAST_NAME` varchar(50) COLLATE utf8_bin DEFAULT NULL, `ACC_EMAIL` varchar(50) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`ACC_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
注意两个数据库中的表都要建立。下面我在本地数据库中创建了2个数据库,一个是zyl,另一个zylxc。两个数据库中都用上面的语句初始化数据库表。
下面是ha-jdbc-claster.xml配置:
<ha-jdbc> <!--<distributable config="" stack="sequencer" /> --> <sync id="diff" class="net.sf.hajdbc.sync.DifferentialSynchronizationStrategy" > <property name="fetchSize">1000</property> <property name="maxBatchSize">100</property> </sync> <cluster default-sync="diff" balancer="load" meta-data-cache="none" dialect="net.sf.hajdbc.dialect.MySQLDialect" transaction-mode="parallel" auto-activate-schedule="0 * * ? * *" failure-detectschedule="0 * * ? * *"> <datasource id="database1"> <name>org.apache.commons.dbcp.BasicDataSource</name> <property name="defaultReadOnly">false</property> <property name="url">jdbc:mysql://localhost:3306/zyl</property> <property name="validationQuery">SELECT 1</property> <property name="username">root</property> <property name="password">123456</property> <property name="maxIdle">3</property> <property name="maxActive">15</property> <property name="driverClassName">com.mysql.jdbc.Driver</property> <property name="minIdle">5</property> <property name="defaultAutoCommit">true</property> <property name="testOnBorrow">true</property> <property name="initialSize">5</property> </datasource> <datasource id="database2"> <name>org.apache.commons.dbcp.BasicDataSource</name> <property name="defaultReadOnly">false</property> <property name="url">jdbc:mysql://localhost:3306/zylxc</property> <property name="validationQuery">SELECT 1</property> <property name="username">root</property> <property name="password">123456</property> <property name="maxIdle">3</property> <property name="maxActive">15</property> <property name="driverClassName">com.mysql.jdbc.Driver</property> <property name="minIdle">5</property> <property name="defaultAutoCommit">true</property> <property name="testOnBorrow">true</property> <property name="initialSize">5</property> </datasource> </cluster> </ha-jdbc>
使用springMVC进行测试,测试代码:
@Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { Account a = new Account(); a.setFirstName("zhang"); a.setLastName("yuliang"); //插入一条记录 accountDao.insert(a); //查询刚刚插入的记录,这里只取一条 List<Account> list = accountDao.getAccountListByAccount(a); request.setAttribute("account", list.get(0)); //更新刚刚插入的记录 a.setId(a.getId()); a.setLastName("san"); accountDao.update(a); return new ModelAndView("index"); }
在上面的测试代码中您可以选择注释后分别一条一条进行测试,您会看到2个数据库中的表进行了同步,如果数据库不在一台机器上面,您可以随意停掉其中一台mysql,然后重启后,新插入的数据会进行自动同步过去。spring mvc其它废话少说,直接上demo附件。