Spring+Hibernate双数据源测试Mysql集群读写分离(转自http://blog.csdn.net/hzw2312/article/details/9083519)

来源:互联网 发布:用友nc系统java插件 编辑:程序博客网 时间:2024/06/06 01:37

进行测试!环境就是SH框架、当然这只是一个简单的测试!

准备环境就是Spring框架跟Hibernate框架的整合!

然后在Spring配置文件中配置两个数据源、这里我采用的是从c3po数据源配置:

注:配置文件中的url里面要加"&"符号的话得这样写"&"

[html]view plaincopyprint?
  1. <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  7.       
  8.     <!-- 读  -->  
  9.     <!--<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  -->  
  10.         <!-- 定义数据源Bean,使用C3P0数据源实现 -->  
  11.          <bean id="dataSourceR" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  12.           <!-- 指定连接数据库的驱动 -->  
  13.           <property name="driverClass" value="com.mysql.jdbc.Driver"/>  
  14.           <!-- 指定连接数据库的URL -->  
  15.           <property name="jdbcUrl" value="jdbc:mysql:loadbalance://10.11.0.75,172.16.0.202:3306/DB_TEST7?roundRobinLoadBalance=true&characterEncoding=UTF-8"/>  
  16.           <!-- 指定连接数据库的用户名 -->  
  17.           <property name="user" value="TESTUSER"/>  
  18.           <!-- 指定连接数据库的密码 -->  
  19.           <property name="password" value="TESTPWD"/>  
  20.           <!-- 指定连接数据库连接池的最大连接数 -->  
  21.           <property name="maxPoolSize" value="20"/>  
  22.           <!-- 指定连接数据库连接池的最小连接数 -->   
  23.           <property name="minPoolSize" value="1"/>  
  24.           <!-- 指定连接数据库连接池的初始化连接数 -->  
  25.           <property name="initialPoolSize" value="1"/>  
  26.           <!-- 指定连接数据库连接池的连接的最大空闲时间 -->  
  27.           <property name="maxIdleTime" value="20"/>  
  28.          </bean>  
  29.         <!--定义了Hibernate的SessionFactory -->  
  30.                 <bean id="sessionFactoryR" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  31.                     <property name="dataSource" ref="dataSourceR"/>  
  32.                     <property name="mappingResources">  
  33.                         <list>  
  34.                         </list>  
  35.                     </property>  
  36.                     <property name="hibernateProperties">  
  37.                         <props>  
  38.                             <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
  39.                             <prop key="show_sql">true</prop>  
  40.                             <prop key="hibernate.hbm2ddl.auto">update</prop>  
  41.                             <prop key="hibernate.jdbc.batch_size">20</prop>   
  42.                         </props>  
  43.                     </property>  
  44.                 </bean>  
  45.                 <bean id="transactionManagerR" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  46.                     <property name="sessionFactory" ref="sessionFactoryR"/>  
  47.                 </bean>  
  48.                 <bean id="transactionInterceptorR" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  49.                  <!--  事务拦截器bean需要依赖注入一个事务管理器 -->  
  50.                     <property name="transactionManager" ref="transactionManagerR"/>  
  51.                  <property name="transactionAttributes">  
  52.                   <!--  下面定义事务传播属性-->  
  53.                   <props>  
  54.                    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
  55.                    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
  56.                   </props>  
  57.                  </property>  
  58.                 </bean>  
  59.             <bean id="daoR" class="com.boxun.test.dao.impl.daoR" >  
  60.                 <property name="sessionFactory">  
  61.                     <ref bean="sessionFactoryR" />  
  62.                 </property>    
  63.             </bean>  
  64.       
  65.     <!-- 写   -->  
  66.     <bean id="dataSourceW" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  67.           <!-- 指定连接数据库的驱动 -->  
  68.           <property name="driverClass" value="com.mysql.jdbc.Driver"/>  
  69.           <!-- 指定连接数据库的URL -->  
  70.           <property name="jdbcUrl" value="jdbc:mysql:loadbalance://10.11.2.126:3306/DB_TEST7?roundRobinLoadBalance=true&characterEncoding=UTF-8"/>  
  71.           <!-- 指定连接数据库的用户名 -->  
  72.           <property name="user" value="TESTUSER"/>  
  73.           <!-- 指定连接数据库的密码 -->  
  74.           <property name="password" value="TESTPWD"/>  
  75.           <!-- 指定连接数据库连接池的最大连接数 -->  
  76.           <property name="maxPoolSize" value="20"/>  
  77.           <!-- 指定连接数据库连接池的最小连接数 -->  
  78.           <property name="minPoolSize" value="1"/>  
  79.           <!-- 指定连接数据库连接池的初始化连接数 -->  
  80.           <property name="initialPoolSize" value="1"/>  
  81.           <!-- 指定连接数据库连接池的连接的最大空闲时间 -->  
  82.           <property name="maxIdleTime" value="20"/>  
  83.          </bean>  
  84.         <!--定义了Hibernate的SessionFactory -->  
  85.                 <bean id="sessionFactoryW" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  86.                     <property name="dataSource" ref="dataSourceW"/>  
  87.                     <property name="mappingResources">  
  88.                         <list>  
  89.                         </list>  
  90.                     </property>  
  91.                     <property name="hibernateProperties">  
  92.                         <props>  
  93.                             <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
  94.                             <prop key="show_sql">true</prop>  
  95.                             <prop key="hibernate.hbm2ddl.auto">update</prop>  
  96.                             <prop key="hibernate.jdbc.batch_size">20</prop>   
  97.                         </props>  
  98.                     </property>  
  99.                 </bean>  
  100.                 <bean id="transactionManagerW" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  101.                     <property name="sessionFactory" ref="sessionFactoryW"/>  
  102.                 </bean>  
  103.                 <bean id="transactionInterceptorW" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  104.                  <!--  事务拦截器bean需要依赖注入一个事务管理器 -->  
  105.                     <property name="transactionManager" ref="transactionManagerW"/>  
  106.                  <property name="transactionAttributes">  
  107.                   <!--  下面定义事务传播属性-->  
  108.                   <props>  
  109.                    <prop key="*">PROPAGATION_REQUIRED</prop>  
  110.                   </props>    
  111.                  </property>  
  112.                 </bean>  
  113.                   
  114.                 <bean id="daoW" class="com.boxun.test.dao.impl.daoW" >  
  115.                 <property name="sessionFactory">  
  116.                     <ref bean="sessionFactoryW" />  
  117.                 </property>    
  118.             </bean>  
  119. </beans></span>  
读的Dao:

[java]view plaincopyprint?
  1. <span style="font-size:14px;">public class daoR extends HibernateDaoSupport implements IdaoR{  
  2.     private Query query = null;  
  3.     public List find(String sql){  
  4.         query = super.getSession().createSQLQuery(sql);  
  5.         return query.list();  
  6.     }  
  7. }     
  8. </span>  

写的Dao:

[java]view plaincopyprint?
  1. <span style="font-size:14px;">public class daoW extends HibernateDaoSupport implements IdaoW{  
  2.     private Query query = null;  
  3.     public void save(String sql){  
  4.         Transaction t = super.getSession().beginTransaction();  
  5.         query = super.getSession().createSQLQuery(sql);  
  6.         query.executeUpdate();    
  7.         t.commit();  
  8.     }  
  9. }</span>  

测试main方法:

[java]view plaincopyprint?
  1. <span style="font-size:14px;">public class Test {  
  2.     public static void main(String[] args) {  
  3.         ApplicationContext context=new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/classes/applicationContext.xml");  
  4.         IdaoR daor =(IdaoR) context.getBean("daoR");  
  5.         IdaoW daow =(IdaoW) context.getBean("daoW");  
  6.         daow.save("insert into city(sname) values('Spring双数据源')");  
  7.         List list = daor.find("select * from city where sname = 'Spring双数据源'");  
  8.         for (int i = 0; i < list.size(); i++) {  
  9.             Object[] obj = (Object[])list.get(i);  
  10.             System.out.println(obj[0]+" --- "+obj[1]);  
  11.         }  
  12.     }  
  13. }  </span>  

输出:

[plain]view plaincopyprint?
  1. <span style="font-size:14px;">log4j:WARN No appenders could be found for logger (org.springframework.context.support.FileSystemXmlApplicationContext).  
  2. log4j:WARN Please initialize the log4j system properly.  
  3. 5 --- Spring双数据源</span>  

测试成功!!!
0 0