首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Spring+Hibernate框架上Mysql读写分离、主从数据库配置(下)

2012-09-17 
Spring+Hibernate框架下Mysql读写分离、主从数据库配置(上)转载:http://lujia35.iteye.com/blog/969466介绍

Spring+Hibernate框架下Mysql读写分离、主从数据库配置(上)

转载:http://lujia35.iteye.com/blog/969466

介绍下mysql数据库读写分离在spring,hibernate框架下的配置。?
1.mysql连接配置文件jdbc.properties?
master.*.*表示主数据库连接参数,负责增,删,改;?
slave.*.*表示从数据库连接参数,只负责读取;?

jdbc.properties

?

Java代码??Spring+Hibernate框架上Mysql读写分离、主从数据库配置(下)
  1. master.jdbc.driverClassName=com.mysql.jdbc.Driver??
  2. master.jdbc.url=********??
  3. master.jdbc.username=********??
  4. master.jdbc.password=********??
  5. ??
  6. slave.jdbc.driverClassName=com.mysql.jdbc.Driver??
  7. slave.jdbc.url=********??
  8. slave.jdbc.username=********??
  9. slave.jdbc.password=********??

把**改成你所需的连接参数;?

2.配置AOP切面类 DataSourceAdvice.java?

Java代码??Spring+Hibernate框架上Mysql读写分离、主从数据库配置(下)
  1. import?java.lang.reflect.Method;??
  2. import?org.springframework.aop.AfterReturningAdvice;??
  3. import?org.springframework.aop.MethodBeforeAdvice;??
  4. import?org.springframework.aop.ThrowsAdvice;??
  5. ??
  6. import?com.company.datasource.DataSourceSwitcher;??
  7. ??
  8. public?class?DataSourceAdvice?implements?MethodBeforeAdvice,?AfterReturningAdvice,?ThrowsAdvice?{??
  9. ????//?service方法执行之前被调用??
  10. ????public?void?before(Method?method,?Object[]?args,?Object?target)?throws?Throwable?{??
  11. ????????System.out.println("切入点:?"?+?target.getClass().getName()?+?"类中"?+?method.getName()?+?"方法");??
  12. ????????if(method.getName().startsWith("add")???
  13. ????????????||?method.getName().startsWith("create")??
  14. ????????????||?method.getName().startsWith("save")??
  15. ????????????||?method.getName().startsWith("edit")??
  16. ????????????||?method.getName().startsWith("update")??
  17. ????????????||?method.getName().startsWith("delete")??
  18. ????????????||?method.getName().startsWith("remove")){??
  19. ????????????System.out.println("切换到:?master");??
  20. ????????????DataSourceSwitcher.setMaster();??
  21. ????????}??
  22. ????????else??{??
  23. ????????????System.out.println("切换到:?slave");??
  24. ????????????DataSourceSwitcher.setSlave();??
  25. ????????}??
  26. ????}??
  27. ??
  28. ????//?service方法执行完之后被调用??
  29. ????public?void?afterReturning(Object?arg0,?Method?method,?Object[]?args,?Object?target)?throws?Throwable?{??
  30. ????}??
  31. ??
  32. ????//?抛出Exception之后被调用??
  33. ????public?void?afterThrowing(Method?method,?Object[]?args,?Object?target,?Exception?ex)?throws?Throwable?{??
  34. ????????DataSourceSwitcher.setSlave();??
  35. ????????System.out.println("出现异常,切换到:?slave");??
  36. ????}??
  37. ??
  38. }??


数据源选择类 DataSourceSwitcher.java?

Java代码??Spring+Hibernate框架上Mysql读写分离、主从数据库配置(下)
  1. package?com.company.datasource;??
  2. import?org.springframework.util.Assert;??
  3. ??
  4. public?class?DataSourceSwitcher?{??
  5. ????@SuppressWarnings("rawtypes")??
  6. ????private?static?final?ThreadLocal?contextHolder?=?new?ThreadLocal();??
  7. ??
  8. ????@SuppressWarnings("unchecked")??
  9. ????public?static?void?setDataSource(String?dataSource)?{??
  10. ????????Assert.notNull(dataSource,?"dataSource?cannot?be?null");??
  11. ????????contextHolder.set(dataSource);??
  12. ????}??
  13. ??
  14. ????public?static?void?setMaster(){??
  15. ????????clearDataSource();??
  16. ????}??
  17. ??????
  18. ????public?static?void?setSlave()?{??
  19. ????????setDataSource("slave");??
  20. ????}??
  21. ??????
  22. ????public?static?String?getDataSource()?{??
  23. ????????return?(String)?contextHolder.get();??
  24. ????}??
  25. ??
  26. ????public?static?void?clearDataSource()?{??
  27. ????????contextHolder.remove();??
  28. ????}??
  29. }??



DynamicDataSource.java数据源动态切换类?

Java代码??Spring+Hibernate框架上Mysql读写分离、主从数据库配置(下)
  1. package?com.company.datasource;??
  2. ??
  3. import?org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;??
  4. ??
  5. public?class?DynamicDataSource?extends?AbstractRoutingDataSource?{??
  6. ??
  7. ????@Override??
  8. ????protected?Object?determineCurrentLookupKey()?{??
  9. ????????return?DataSourceSwitcher.getDataSource();??
  10. ????}??
  11. ??
  12. }??


下面配置spring applicationContext.xml文件?(Spring+Hibernate框架下Mysql读写分离、主从数据库配置(下))

热点排行