spring mvc+mybatis+多数据源切换

spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源。oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换。

web.xml

Java代码  

  1. <context-param>
  2. <param-name>webAppRootKey</param-name>
  3. <param-value>trac</param-value>
  4. </context-param>
  5. <!-- Spring的log4j监听器 -->
  6. <listener>
  7. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  8. </listener>
  9. <!-- 字符集 过滤器 -->
  10. <filter>
  11. <filter-name>CharacterEncodingFilter</filter-name>
  12. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  13. <init-param>
  14. <param-name>encoding</param-name>
  15. <param-value>utf8</param-value>
  16. </init-param>
  17. <init-param>
  18. <param-name>forceEncoding</param-name>
  19. <param-value>true</param-value>
  20. </init-param>
  21. </filter>
  22. <filter-mapping>
  23. <filter-name>CharacterEncodingFilter</filter-name>
  24. <url-pattern>/*</url-pattern>
  25. </filter-mapping>
  26. <!-- Spring view分发器 -->
  27. <servlet>
  28. <servlet-name>dispatcher</servlet-name>
  29. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  30. <init-param>
  31. <param-name>contextConfigLocation</param-name>
  32. <param-value>/WEB-INF/dispatcher.xml</param-value>
  33. </init-param>
  34. <load-on-startup>1</load-on-startup>
  35. </servlet>
  36. <servlet-mapping>
  37. <servlet-name>dispatcher</servlet-name>
  38. <url-pattern>*.action</url-pattern>
  39. </servlet-mapping>
  40. <listener>
  41. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  42. </listener>

dispatcher.xml

Java代码  

  1. <mvc:annotation-driven />
  2. <context:component-scan base-package="com.trac" />
  3. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
  4. <!-- freemarker config -->
  5. <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  6. <property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
  7. <property name="freemarkerVariables">
  8. <map>
  9. <entry key="xml_escape" value-ref="fmXmlEscape" />
  10. </map>
  11. </property>
  12. <property name="freemarkerSettings">
  13. <props>
  14. <prop key="defaultEncoding">UTF-8</prop>
  15. </props>
  16. </property>
  17. </bean>
  18. <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
  19. <!-- View resolvers can also be configured with ResourceBundles or XML files.
  20. If you need different view resolving based on Locale, you have to use the
  21. resource bundle resolver. -->
  22. <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  23. <property name="exposeRequestAttributes" value="true" />
  24. <property name="exposeSessionAttributes" value="true" />
  25. <property name="exposeSpringMacroHelpers" value="true" />
  26. <property name="contentType" value="text/html;charset=UTF-8" />
  27. <property name="cache" value="true" />
  28. <property name="prefix" value="" />
  29. <property name="suffix" value=".ftl" />
  30. </bean>

applicationContext.xml

Java代码  

  1. <bean id="parentDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  2. </bean>
  3. <bean id="mySqlDataSource" parent="parentDataSource">
  4. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  5. <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
  6. <property name="username" value="root"></property>
  7. <property name="password" value="root"></property>
  8. </bean>
  9. <bean id="oracleDataSource" parent="parentDataSource">
  10. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
  11. <property name="url" value="jdbc:oracle:thin:@10.16.17.40:1531:addb"></property>
  12. <property name="username" value="trac"></property>
  13. <property name="password" value="trac"></property>
  14. </bean>
  15. <bean id="dataSource" class="com.trac.dao.datasource.DataSources">
  16. <property name="targetDataSources">
  17. <map key-type="java.lang.String">
  18. <entry value-ref="mySqlDataSource" key="MYSQL"></entry>
  19. <entry value-ref="oracleDataSource" key="ORACLE"></entry>
  20. </map>
  21. </property>
  22. <property name="defaultTargetDataSource" ref="oracleDataSource"></property>
  23. </bean>
  24. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  25. <property name="dataSource" ref="dataSource" />
  26. </bean>
  27. <!-- 创建SqlSessionFactory,同时指定数据源和mapper -->
  28. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  29. <property name="dataSource" ref="dataSource" />
  30. <property name="mapperLocations" value="classpath*:com/trac/ibatis/dbcp/*.xml" />
  31. </bean>
  32. <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  33. <constructor-arg index="0" ref="sqlSessionFactory" />
  34. </bean>
  35. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  36. <property name="basePackage" value="com.trac.dao" />
  37. </bean>

配置 parentDataSource 的父bean.再配置多个数据源继承这个父bean,对driverClass,url,username,password,等数据源连接参数进行各自的重写。例如 mySqlDataSource ,在 DataSources bean中注入所有要切换的数据源,并且设置默认的数据源。

DataSourceInstances.java

Java代码  

  1. public class DataSourceInstances{
  2. public static final String MYSQL="MYSQL";
  3. public static final String ORACLE="ORACLE";
  4. }
  5. 定义数据源的标识, 和applicationContext.xml中 DataSources 的 targetDataSources 的key对应

DataSourceSwitch.java

Java代码  

  1. public class DataSourceSwitch{
  2. private static final ThreadLocal contextHolder=new ThreadLocal();
  3. public static void setDataSourceType(String dataSourceType){
  4. contextHolder.set(dataSourceType);
  5. }
  6. public static String getDataSourceType(){
  7. return (String) contextHolder.get();
  8. }
  9. public static void clearDataSourceType(){
  10. contextHolder.remove();
  11. }
  12. }

DataSources.java

Java代码  

  1. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
  2. public class DataSources extends AbstractRoutingDataSource{
  3. @Override
  4. protected Object determineCurrentLookupKey() {
  5. return DataSourceSwitch.getDataSourceType();
  6. }
  7. }
  8. 配置于applicationContext 中,线程局部变量ThreadLocal contextHolder 保存当前需要的数据源类型,当 DataSourceSwitch.setDataSourceType(DataSourceInstances.XXX) 保存当前需要的数据源类型的时候,DataSources 会从当前线程中查找线程变量的数据源类型,从而决定使用何种数据源

TestAction.java

Java代码  

  1. @Controller
  2. @SuppressWarnings("unused")
  3. public class TestAction {
  4. @Autowired
  5. TestMapper testMapper;
  6. @RequestMapping("/test.action")
  7. public ModelAndView test(
  8. HttpServletRequest request,
  9. HttpServletResponse resp){
  10. ModelAndView model = new ModelAndView("test");
  11. model.addObject("test1", "这是一个测试,获取默认数据连接MYSQL:"+testMapper.test());
  12. DataSourceSwitch.setDataSourceType(DataSourceInstances.ORACLE);
  13. model.addObject("test2", "这是一个测试,获取数据连接ORACLE:"+testMapper.test());
  14. DataSourceSwitch.setDataSourceType(DataSourceInstances.MYSQL);
  15. model.addObject("test3", "这是一个测试,获取数据连接MYSQL:"+testMapper.test());
  16. return model;
  17. }
  18. }

《源码地址下载

》》源码地址获取

springmvc + mybatis整合详细,及遇到的问题请参看以下资料:

参考资料:

http://www.springmvc,net/detail/6074493.html

http://my.spring.net/wangbiglei/blog/489583

http://my.springmvc.net/wangbiglei/blog/489604

时间: 2024-10-14 11:27:28

spring mvc+mybatis+多数据源切换的相关文章

Spring+spring mvc+mybatis+多数据源切换

spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web.xml Java代码   <context-param> <param-name>webAppRootKey</param-name> <param-value>trac</param-value> </context-param> &l

spring boot+mybatis 多数据源切换

由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TargetDataSource { String value();//此处接收的是数据源的名称 } 2.然后建一个配置类,这个在项目启动时会加载数据源,一开始采用了HikariCP,查资料说是最快性能最好的

基于Spring + Spring MVC + Mybatis + shiro 高性能web构建

一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/starzou/quick4j 点击打开 看我们的项目结构: 是一个典型

[转]基于Spring + Spring MVC + Mybatis 高性能web构建

http://blog.csdn.net/zoutongyuan/article/details/41379851/ 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源

基于Spring + Spring MVC + Mybatis 高性能web构建

一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/starzou/quick4j 点击打开 看我们的项目结构: 是一个典型

Spring MVC +MyBatis +MySQL 简单的登录查询 Demo 解决了mybatis异常

忙活了大半天,饭也没顾得上吃,哎许久不动手,一动手就出事,下面请看今天的重头戏,额吃个饭回来再发了! 1.整体结构 2.准备工作 数据库: --Mysql 5.6 创建数据库 wolf CREATE DATABASE wolf; 创建用户表 user create table user( id int  AUTO_INCREMENT  primary key, name varchar(25) not null, pwd varchar(20) not null, create_time dat

spring mvc+mybatis整合 (二)

转:http://lifeneveralone.diandian.com/post/2012-11-02/40042292065 本文介绍使用spring mvc结合Mybatis搭建一个应用程序框架. demo源码下载:springMVC-Mybatis 1.准备工作: spring的jar包: spring-beans-3.1.0.RELEASE.jar spring-core-3.1.0.RELEASE.jar spring-web-3.1.0.RELEASE.jar spring-web

Spring+Spring MVC+Mybatis+Maven搭建多模块项目(一)

Spring+Spring MVC+Mybatis+Maven搭建多模块项目(一) 标签:               springmvcspring mvcmybatismaven 2016-11-22 22:27             4425人阅读             评论(1)             收藏              举报 .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid

Spring MVC+Mybatis+Maven+Velocity+Mysql整合实例

本篇文章将通过一个简单显示用户信息的实例整合Spring mvc+mybatis+Maven+velocity+mysql. 对于实现整合的重点在于以下几个配置文件的实现 1.Maven依赖包 2.spring配置文件(springContext-user.xml) 3.mybatis配置文件(MyBatis-User-Configuration.xml) 4.spring-mvc配置文件(spring-mvc.xml) 5.web.xml配置文件 源码下载地址:http://download.