`
stephen
  • 浏览: 27261 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Re: 如何在spring框架中解决多数据源的问题

阅读更多
atianchen 写道

当一个请求进来时候,我写了一个Filter会根据request请求信息设置当前的sessionFactory

然后就是重写,需要重写spring关于Hibernate3支持的四个类
HibernateAccessor,HibernateDaoSupport,HibernateTemplate,HibernateTransactionManager
其实主要是修改HibernateAccessor和HibernateTransactionManager的sessionFactory获取方式,由于HibernateDaoSupport->HibernateTemplate->HibernateAccessor,所以重写HibernateAccessor就要重写HibernateDaoSupport和HibernateTemplate


这种方式需要修改 spring,改很多的 spring 类。有一种类似,但是不需修改 spring:
spring 多数据源解决方案

多数据源问题可以打个比喻:假设有个工厂原来可以生产汽车,现在也想这个工厂可以生产火车。
在这个时候,有两个解决办法:
第一种是改造这个工厂的生产设备,使得一个工厂就可以同时生产汽车和火车。
第二种是新建一个工厂,这个工厂专门生产火车。原来的工厂保持不变。

LZ 和 atianchen 用的是第一种方法。还是用一个 BeanFactory ,然后里面声明多个的 DataSource 。用这种方法就需要修改 spring 相关的类。

spring 多数据源解决方案
这里用的就是第二种方法,直接使用多个 BeanFactory ,每个 BeanFactory 使用的 DataSource 不同。使用这种方法,不需修改 spring 的类,而是需要修改上层调用 BeanFactory 的地方。

两种方法的差异在于:
第一种方法使用隐式的参数传递(ThreadLocal,或者SessionContext),希望对上层调用者隐藏多数据源的事实;
第二种方法是直接曝露接口给上层调用者,由调用者决定怎么使用。
如果从灵活性角度来说,第二种会更好。因为调用者可以直接通过 Registry.getBeanFacrtory(xxx).getBean(yyy) 来获得相应的 bean 。对于上面有人提到一次请求中需要用到两个 DataSource 的问题,也可以解决。

由于有 servlet 的 filter 机制,或者 webwork 的 interceptor 机制,所以修改上层调用 BeanFactory 的地方也能够得到很大的简化,并不复杂。

分享到:
评论

相关推荐

    activiti5.16.4整合springmvc 4.0.6

    Spring MVC则是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。当我们谈论"activiti5.16.4整合springmvc 4.0.6"时,我们关注的是如何将这两个强大的技术结合在一起,创建一个能够处理...

    java常用框架学习笔记

    - **数据源DataSoursce的配置**:在Spring中,数据源通常作为Bean进行配置,Spring支持多种数据源实现,如BasicDataSource、DBCP等。 - **JDBC支持**:Spring提供了JdbcTemplate等工具类来简化JDBC的使用。 - **...

    SpringMVC Activiti mysql

    在Spring配置中,我们需要定义ProcessEngineConfigurationBean,设置数据源、流程定义的资源路径等。同时,创建流程服务和历史服务的bean,以便在业务代码中调用。 - 在业务逻辑中,我们可以通过Activiti提供的API...

    activiti6.0官方英文文档,需要自取 免费!免费!免费!

    - **集成**:将Activiti集成到现有的项目中,例如Spring框架。 ##### 2.3 数据库设置 - **支持的数据库**:Activiti支持多种数据库系统,包括MySQL、PostgreSQL等。 - **表结构**:文档详细解释了如何创建必要的...

    81个Python爬虫源代码+九款开源爬虫工具.doc

    Python爬虫技术是数据获取和分析领域的重要工具,尤其在互联网信息海量的今天,爬虫可以帮助我们自动化地从网站上...对于Python爬虫学习者来说,了解这些源代码和工具不仅可以提升编程技能,还能拓宽解决问题的思路。

    Activiti入门之三--ORM框架MyBatis的基础及使用

    MyBatis 配置文件中,需要指定数据源、事务管理器等信息,并启用 MyBatis 的日志功能以方便调试。映射文件则包含具体的 SQL 语句,与 Mapper 接口一一对应。 在 Activiti 中,我们可以自定义 Service Task 来执行...

    基于java的宠物领养系统设计与实现+毕业论文

    标题中的“基于Java的宠物领养系统设计与实现”是一个典型的IT项目,主要涉及使用Java编程语言来构建一个在线宠物...对于学习者而言,通过这个项目可以深入理解Java Web开发的全貌,提升实际开发能力和问题解决能力。

    初步学习web.zip

    3. 在Spring配置文件中配置数据源:将德鲁伊数据源作为Spring的bean注入,以便在应用中使用。 接下来,我们使用Apache Tomcat作为本地服务器。Tomcat是一款开源的Servlet容器,支持Java Servlet和JavaServer Pages...

    通过代码实例了解SpringBoot启动原理

    此外,SpringBoot框架还提供了许多其他的自动配置功能,如自动配置数据源、自动配置Web容器等等。这些功能都可以通过@EnableAutoConfiguration注解来启用。 SpringBoot框架的启动过程是通过@SpringBootApplication...

    geoserver源码编译文件

    1. Web应用程序架构:GeoServer基于Spring框架,其配置文件和Bean定义在src/main/webapp/WEB-INF下。 2. 数据处理:GeoServer的核心数据处理组件位于src/main/java/org/geoserver目录下,包括WMS、WFS服务的实现以及...

    java版商城源码-News-app:新闻提要网络应用程序上的一个小型实验性spring-boot项目

    java版商城源码News-app:一个基本的新闻提要网络应用程序(2020 年 6 月 2 日编辑) 所有功能都可能更新 概述 新闻应用程序是一个小型示例 spring-boot 项目,针对新闻提要 ...应用程序中的服务。...Re

    程序员文摘第25期-精选最有价值的文章

    5. **SpringCache与Redis**:SpringCache是Spring框架的一个模块,用于缓存管理。整合Redis作为缓存存储,可以提高应用性能,减少对数据库的访问。快速上手教程会涵盖配置、注解使用等方面。 6. **Python切片操作**...

    crud-springboot-reactjs:Mapremière应用

    Spring Boot简化了Spring框架的配置,提供了一种快速开发微服务和Web应用的方式。它内建了对数据库连接、RESTful API设计、安全等许多功能的支持。 文件名"crud-springboot-reactjs-main"暗示了项目的主代码仓库或...

    rest-sso.rar

    【标题】"rest-sso.rar" 提供的是一款基于RESTful API的SSO(Single Sign-On,单点登录)解决方案的源代码。SSO是一种网络访问控制机制,允许用户通过一次登录验证,即可访问多个相互信任的应用系统,而无需再次进行...

    java_编程常用英语单词_解释.pdf

    在Java中,有许多流行的框架,如Spring、Hibernate等。 #### 38. Generic (泛型) - **拼音**: [dʒi'nerik] - **解释**: “Generic”是指Java中的一种类型参数化机制,允许创建可以用于多种类型的通用类或方法。这...

    SpringBoot开发非常美观的java博客系统(包含后台管理功能).pdf

    在技术选型上,本系统选择了JDK8作为开发环境,MySQL作为数据库存储,Spring-boot和Spring-data-jpa构成主要框架,负责数据操作和业务逻辑。安全性方面,采用Shiro进行权限管理,搜索引擎选用了Lucene,缓存管理使用...

    Springboot博客开发.rar

    在SpringBoot中实现这样的系统,我们可以利用Spring Security进行身份验证和授权,使用Thymeleaf或Freemarker作为模板引擎渲染前端页面,使用MyBatis或JPA作为数据访问层,处理与数据库的交互。 `blog.zip`文件很...

    Redis-x64-3.2.100

    在实际应用中,Redis常常与其他技术结合使用,例如与Spring Boot框架集成,构建微服务的缓存层;或者在大数据分析中作为中间数据存储,加速计算过程。 总结起来,Redis-x64-3.2.100是一个针对64位系统的高性能键值...

    BackEndMagTech:Servidor daaplicaçãoda rede社交MagTech

    在“BackEndMagTech-master”这个压缩包中,很可能包含了项目源代码、配置文件、数据库脚本、部署文档等资源,帮助开发者理解和构建类似 MagTech 的社交网络后端系统。通过深入研究这些文件,我们可以学习到实际项目...

Global site tag (gtag.js) - Google Analytics