methodname="get*"propagation="NOT_SUPPORTED"
read-only="true"/>
methodname="is*"propagation="NOT_SUPPORTED"
read-only="true"/>
--设置所有方法均进行事务控制,如果当前没有事务,则新建一个事务-->
methodname="*"propagation="REQUIRED"/>
attributes>
advice>
--定义一个事务通知txAdvice,配置事务的传播特性-->
--装配HibernateTemplate实例-->
--装配通用数据库访问类BaseDAOImpl-->
Book3.hbm.xml文件如下:
xmlversion="1.0"encoding="utf-8"?
>
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"
(liwh是模式名,BOOK3是表名)
DynamicDataSource.action//动态分配数据源
packagemon;
importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
publicclassDynamicDataSourceextendsAbstractRoutingDataSource{
@Override
protectedObjectdetermineCurrentLookupKey(){
returnDataSourceContextHolder.getProxType();
}
}
DataSourceContextHolder.action//设置数据源
packagemon;
publicclassDataSourceContextHolder{
publicstaticfinalStringDATA_SOURCE_A="dataSourceA";
publicstaticfinalStringDATA_SOURCE_B="dataSourceB";
publicstaticfinalStringDATA_SOURCE_C="dataSourceC";
privatestaticfinalThreadLocalcontextHolder=newThreadLocal();
publicstaticvoidsetProxType(StringcustomerType){
contextHolder.set(customerType);
}
publicstaticStringgetProxType(){
returncontextHolder.get();
}
publicstaticvoidclearProxType(){
contextHolder.remove();
}
}
Tools.action//指定数据源
publicstaticvoidsetDataSource(inth){
if(h==1)
DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_A);
elseif(h==2)
DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_B);
elseif(h==3)
DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_C);
}
在service文件的各个方法中指定数据源。
publicListbrowseEmployee(){
Tools.setDataSource(3);
Listl=dao.listAll("Employee");
System.out.println("booksize="+l.size());
returnl;
}
在acton文件中调用service的browseEmployee()方法。
大功告成,呵呵!
2013-04-01