javaEE项目建立多个数据源并配置事务

现在有以下3个数据源:

jdbc1.driver=oracle.jdbc.driver.OracleDriver
jdbc1.url=jdbc:oracle:thin:@127.0.0.1:1521:jdbc1
jdbc1.user=jdbc1
jdbc1.pwd=jdbc1
jdbc1.validationQuery=select 1 from dual
jdbc1.pagesize=12

jdbc2.jdbc.driver = oracle.jdbc.driver.OracleDriver
jdbc2.jdbc.url = jdbc:oracle:thin:@127.0.0.1:152:jdbc2
jdbc2.jdbc.user=jdbc2
jdbc2.jdbc.pwd=jdbc2
jdbc2.jdbc.validationQuery=select 1 from dual
jdbc2.jdbc.pagesize=12

jdbc3.driver=oracle.jdbc.driver.OracleDriver
jdbc3.url=jdbc:oracle:thin:@127.0.0.1:1521:jdbc3
jdbc3.user=jdbc3
jdbc3.pwd=jdbc3
jdbc3.validationQuery=select 1 from dual
jdbc3.pagesize=12

spring 配置文件配置数据源:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    <!-- dataSource1-->
    <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc1.driver}" />
        <property name="url" value="${jdbc1.url}" />
        <property name="username" value="${jdbc1.user}" />
        <property name="password" value="${jdbc1.pwd}" />
        <property name="maxActive" value="30" />
        <property name="maxIdle" value="30" />
        <property name="maxWait" value="10000" />
        <property name="logAbandoned" value="true" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="150" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="300000" />
        <property name="minEvictableIdleTimeMillis" value="320000" />
    </bean>
    <!--dataSource2 -->
    <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc2.jdbc.driver}" />
        <property name="url" value="${jdbc2.jdbc.url}" />
        <property name="username" value="${jdbc2.jdbc.user}" />
        <property name="password" value="${jdbc2.jdbc.pwd}" />
        <property name="maxActive" value="30" />
        <property name="maxIdle" value="30" />
        <property name="maxWait" value="10000" />
        <property name="logAbandoned" value="true" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="150" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="300000" />
        <property name="minEvictableIdleTimeMillis" value="320000" />
    </bean>
    
    <bean id="dataSource3" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc3.driver}" />
        <property name="url" value="${jdbc3.url}" />
        <property name="username" value="${jdbc3.user}" />
        <property name="password" value="${jdbc3.pwd}" />
        <property name="maxActive" value="30" />
        <property name="maxIdle" value="30" />
        <property name="maxWait" value="10000" />
        <property name="logAbandoned" value="true" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="150" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="300000" />
        <property name="minEvictableIdleTimeMillis" value="320000" />
    </bean>
    
    <bean id="nativeJdbcExtractor"     class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />

<bean id="oracleLobHandle" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
        <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
    </bean>
    
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="lobHandler" ref="oracleLobHandle" />
        <property name="mappingDirectoryLocations">
            <list>
                <value>classpath*:resource/hibernate</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}
                </prop>
                <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}
                </prop>
                <prop key="hibernate.query.factory_class">${hibernate.query.factory_class}</prop>
            </props>
        </property>
    </bean>

<!--Hibernate TransactionManager-->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource" />       <!--dataSource bean 的id-->
        </property>
        <property name="globalRollbackOnParticipationFailure" value="false" />
    </bean>
    
    <aop:config proxy-target-class="true">  <!--事务控制在service层和dao层-->
        <aop:pointcut id="serviceMethods"
            expression="execution(* *..*ServiceImpl.*(..))" />
            <aop:pointcut id="managerMethods"
            expression="execution(* *..*ManagerImpl.*(..))" />
        <aop:pointcut id="serviceMethods2"
            expression="execution(* *..*Dao.*(..))" />
        <aop:advisor pointcut-ref="serviceMethods" advice-ref="txAdvice" />
        <aop:aspect ref="logMonitor">   <!--自定义LogProfiler打印数据库日志-->
            <aop:around pointcut-ref="serviceMethods" method="profileMethod" />
        </aop:aspect>
    </aop:config>
    
    <bean id="logMonitor" class="LogProfiler" />
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*"/>
            <tx:method name="insert*" />
            <tx:method name="remove*" />
            <tx:method name="delete*" />
            <tx:method name="update*" />
            <tx:method name="add*" />
            <tx:method name="*" read-only="true" />
        </tx:attributes>
    </tx:advice>
</beans>

  1. 写好一个类继承JdbcGenericDao继承JdbcTemplate,JdbcTemplate需要传人dataSource;

    public class JdbcGenericDao extends JdbcTemplate {
        protected Log log = LogFactory.getLog(getClass());
        protected LobHandler lobHandler;
        
        public void setLobHandler(LobHandler lobHandler) {
            this.lobHandler = lobHandler;
        }
    }

2.给项目不同模块dao类(如:FundInfoDao,CommonLog,FundDirectDao)继承JdbcGenericDao,并传人指定的dataSource;

<bean id="fundInfoDao" class="FundInfoDao">
        <property name="dataSource" ref="dataSource1"/>
    </bean>
 
    <bean id="commonLogDao" class="CommonLog">
        <property name="dataSource" ref="dataSource2"/>
    </bean>
 
    <bean id="fundDirectDao" class="FundDirectDao">
        <property name="dataSource" ref="dataSource3"/>
    </bean>

3.总结

接口的多态性,spring整合jdbc的JdbcTemplate,需要dataSource 的bean,这个bean具体怎么实现不管,只要符合规定就可以;

时间: 2024-09-30 20:55:43

javaEE项目建立多个数据源并配置事务的相关文章

intellij idea 为JavaEE项目建立Servlet

建立Servlet的方法 顶部菜单栏 View > Tool Windows > Web. 然后互相web窗口 右键Web>new>Servlet 弹出窗口 intellij idea 为JavaEE项目建立Servlet,布布扣,bubuko.com

通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql

说一下配置: 服务器weblogic 项目使用的是spring管理Bean,数据源配置也是基于Spring的dbcp数据源,并且用log4jdbc进行sql日志打印,采用logback+slf4j日志打印.log4jdbc能够很好打印sql,并且参数也带上了,这在项目开发与后期系统出现的问题查找原因都有很大的帮助. 数据库配置如下: jdbc.driverClassName=net.sf.log4jdbc.DriverSpy jdbc.url=jdbc:oracle:thin:@ip:port/

resin 4.0数据源的配置

在resin 的conf 文件下有resin.xml  我们在这里可以配置数据源以及配置项目 一.配置多个数据源,多个项目共享这些数据源,也就是这些数据源配置在<host>   </host>  之内,而在<web-app>   </web-app> 之外,这样所有的这些项目都能访问这些数据源 实例: <host id="localhost" root-directory="D:\Javaee\project\test\&

JNDI学习总结(一)——JNDI数据源的配置

一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection con  = DriverManager.getConnection();)   ③操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)   ④关闭数据库,释放连接(con.close();) 也

Java Web项目中连接Access数据库的配置方法

本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问题,所以今天改了一下又一次的公布了 老师决定期末考试採用access数据库实现增删改查.我觉得如今的我已经没有问题了.可是曾经都是在JSP页面中连接access数据库,不管是下面的那种方式都进行了连接的练习,可是如今我想让我的项目中的訪问access数据库的java代码,封装到DAO中,在DAO中连接数据库,

JNDI数据源的配置

一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection con  = DriverManager.getConnection();)   ③操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)   ④关闭数据库,释放连接(con.close();) 也

【转】Spring, MyBatis 多数据源的配置和管理

同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还有平台下的游戏对应的数据库: 2)两个或多个数据库是master-slave的关系,比如有mysql搭建一个 master-master,其后又带有多个slave:或者采用MHA搭建的master-slave复制: 目前我所知道的 Spring 多数据源的搭建大概有两种方式,可以根据多数据源的情况进

JNDI数据源局部配置(解决Cannot create JDBC driver of class &#39;&#39; for connect URL &#39;null&#39;)

最开始,我是借鉴 孤傲苍狼的JNDI教程去做的,他讲得很详细,但是坏处也就是因为他讲的太详细.查了很多书,都是建议说不要用全局去配置JNDI,一是要修改tomcat的server.xml,容易破坏tomcat ,其次是那样吃力不讨好.我是建议用局部变量就好的. 1.步骤一:学习配置JNDI之前,介绍你一定要先掌握tomcat的配置虚拟目录(可以去看Tomcat中主目录配置与虚拟目录配置问题这样的文章,也可以去我的tomcat配置虚拟目录 -思维焦点网易博客找类似的链接).学习了tomcat的配置

Spring多数据源的配置和使用

1. 配置多个数据源 最近开发一个数据同步的小功能,需要从A主机的Oracle数据库中把数据同步到B主机的Oracle库中.当然能够用dmp脚本或者SQL脚本是最好,但是对于两边异构的表结构来说,直接导入不可行.然后在需要实时同步的情况下用存储过程也不可行了.写一个数据同步的小程序是个不错的选择.使用框架的封装和连接池是必须的,Spring是首选,这里我们同样需要Spring的多数据源连接配置方式. 其实再进行项目开发的时候,一个项目有可能不止用到一个数据源,为了提高数据库的水平伸缩性,需要对多