【问题标题】:Two c3p0 pools from same database schema when using JPA/Hibernate使用 JPA/Hibernate 时来自同一数据库模式的两个 c3p0 池
【发布时间】:2014-05-19 05:59:42
【问题描述】:

我的问题与此有些相关; Can I use multiple C3P0 datasources for DB instance?

我有两个 Spring web services 访问相同的 mySQL 数据库架构。我正在使用c3p0 来汇集数据库连接。我正在使用JPA/Hibernate访问数据库

我已经配置了两个数据库池,实体管理器工厂和事务管理器类似于上面的问题。

在第一次服务中

 <bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost/test?zeroDateTimeBehavior=convertToNull" 
    p:user="test1" p:password="test1"
    p:acquireIncrement="1" p:idleConnectionTestPeriod="10" p:maxPoolSize="25"
    p:maxStatements="20" p:minPoolSize="5" >
 </bean>

<bean id="entityManagerFactory1"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
        <property name="persistenceUnitName" value="hibernatePersistenceUnit1" />
        <property name="dataSource" ref="dataSource1" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>

<bean id="transactionManager1" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource1" />
    <property name="entityManagerFactory" ref="entityManagerFactory1" />
</bean>

在第二个服务中

 <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost/test?zeroDateTimeBehavior=convertToNull" 
    p:user="test1" p:password="test1"
    p:acquireIncrement="1" p:idleConnectionTestPeriod="10" p:maxPoolSize="25"
    p:maxStatements="20" p:minPoolSize="5" >
 </bean>

<bean id="entityManagerFactory2"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
        <property name="persistenceUnitName" value="hibernatePersistenceUnit2" />
        <property name="dataSource" ref="dataSource2" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>

<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource2" />
    <property name="entityManagerFactory" ref="entityManagerFactory2" />
</bean>

我还用相关的事务管理器注释了两个数据访问类

@Transactional("transactionManager1")
public class JPADataAccessObject1<T, ID extends Serializable> implements DataAccessObject<T, ID>

@Transactional("transactionManager2")
    public class JPADataAccessObject2<T, ID extends Serializable> implements DataAccessObject<T, ID>

我的一个服务有一个使用 jpa-inbound-channel-adapter 的 spring 消息通道

<int:channel id="testChannel">
        <int:priority-queue capacity="20" />
    </int:channel>

<int-jpa:inbound-channel-adapter
        channel="testChannel" entity-class="com.test.TestObject"
        entity-manager-factory="entityManagerFactory1" auto-startup="true"
        jpa-query="SELECT x FROM TestObject AS x WHERE x.testColumns LIKE '1'"
        delete-after-poll="true">
        <int:poller fixed-rate="5000">
            <int:transactional propagation="REQUIRED"
                transaction-manager="transactionManager1" />
        </int:poller>
    </int-jpa:inbound-channel-adapter>

现在的问题是,当我在 tomcat 7 中部署这两个服务时,它们变得没有响应。对此有什么想法吗?

【问题讨论】:

    标签: java hibernate jpa c3p0 spring-ws


    【解决方案1】:

    我采用了不同的方法并在tomcat 中设置了一个容器管理的数据库池,并称为JNDI 资源。

    Server.xml

    <Resource type="javax.sql.DataSource"
           name="jdbc/TEST"
           factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
           driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost/test?zeroDateTimeBehavior=convertToNull"
           username="test1"
           password="test1" 
           initialSize="10"
           maxActive="100"
           maxIdle="50"
           minIdle="10"/>
    

    Context.xml

    <ResourceLink type="javax.sql.DataSource"
                    name="jdbc/LocalTEST"
                    global="jdbc/TEST"/>
    

    datasource 的 bean 配置是,

        <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="java:comp/env/jdbc/LocalTEST"/>
        </bean> 
    

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2014-08-21
      • 2012-06-15
      • 2011-03-19
      • 1970-01-01
      • 2021-05-18
      相关资源
      最近更新 更多