Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 在JavaMVC(JDK1.6)中使用c3p0_Spring Mvc_Persistence_C3p0 - Fatal编程技术网

Spring mvc 在JavaMVC(JDK1.6)中使用c3p0

Spring mvc 在JavaMVC(JDK1.6)中使用c3p0,spring-mvc,persistence,c3p0,Spring Mvc,Persistence,C3p0,我正在尝试为多个WAR文件应用程序创建全局连接。 每个项目都使用实体管理器架构和maven。我使用的是spring 3.5.1、tomcat 6.0.39、JDK 1.6.0_45、C3P00.9.1.2、hibernate-C3P04.2.3.Final、com.mchange C3P00.9.2 我看到了很多例子,但没有一个对我有用,我不知道为什么。 我几乎什么都试过了,但我不知道出了什么问题 我已将以下内容写入server.xml: <Resource auth="Container

我正在尝试为多个WAR文件应用程序创建全局连接。 每个项目都使用实体管理器架构和maven。我使用的是spring 3.5.1、tomcat 6.0.39、JDK 1.6.0_45、C3P00.9.1.2、hibernate-C3P04.2.3.Final、com.mchange C3P00.9.2

我看到了很多例子,但没有一个对我有用,我不知道为什么。 我几乎什么都试过了,但我不知道出了什么问题

我已将以下内容写入server.xml:

<Resource auth="Container"
    description="DB Connection"
    driverClass="com.mysql.jdbc.Driver"
    maxPoolSize="20"
    minPoolSize="12"
    acquireIncrement="1"
    name="jdbc/testdb1"
    user="root"
    password=""
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="jdbc:mysql://localhost:3306/test_db1?autoReconnect=true" />
<ResourceLink name="jdbc/testdb1"
  global="jdbc/testdb1"
  type="javax.sql.DataSource" />
<resource-ref>
<res-ref-name>jdbc/testdb1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
并将其转换为context.xml,如下所示:

<Resource auth="Container"
    description="DB Connection"
    driverClass="com.mysql.jdbc.Driver"
    maxPoolSize="20"
    minPoolSize="12"
    acquireIncrement="1"
    name="jdbc/testdb1"
    user="root"
    password=""
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="jdbc:mysql://localhost:3306/test_db1?autoReconnect=true" />
<ResourceLink name="jdbc/testdb1"
  global="jdbc/testdb1"
  type="javax.sql.DataSource" />
<resource-ref>
<res-ref-name>jdbc/testdb1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
并将以下内容转换为web.xml:

<Resource auth="Container"
    description="DB Connection"
    driverClass="com.mysql.jdbc.Driver"
    maxPoolSize="20"
    minPoolSize="12"
    acquireIncrement="1"
    name="jdbc/testdb1"
    user="root"
    password=""
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="jdbc:mysql://localhost:3306/test_db1?autoReconnect=true" />
<ResourceLink name="jdbc/testdb1"
  global="jdbc/testdb1"
  type="javax.sql.DataSource" />
<resource-ref>
<res-ref-name>jdbc/testdb1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
和我的项目应用程序特定配置:

第1部分JPA XML文件:

<bean id="transactionManagerMysql" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emfMysql"/>
</bean>
<bean id="emfMysql" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jdbc/testdb1" />
<property name="persistenceXmlLocation" value="classpath:persistence-infrastructure.xml" />
<property name="persistenceUnitName" value="puMysql" />
<property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>        
<property name="jpaProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.max_fetch_depth">3</prop>
        <prop key="hibernate.jdbc.fetch_size">50</prop>
        <prop key="hibernate.jdbc.batch_size">10</prop>
        <prop key="hibernate.show_sql">true</prop>
    </props>        
</property>
</bean>
<jpa:repositories base-package="domain.data.repository"
entity-manager-factory-ref="emfMysql"
transaction-manager-ref="transactionManagerMysql"/>
<persistence-unit name="puMysql" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>domain.Mysqltable1</class>
<properties>
    <property name="hibernate.connection.datasource" value="jdbc/testdb1"/>
</properties>
</persistence-unit>
第2部分持久性XML文件:

<bean id="transactionManagerMysql" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emfMysql"/>
</bean>
<bean id="emfMysql" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jdbc/testdb1" />
<property name="persistenceXmlLocation" value="classpath:persistence-infrastructure.xml" />
<property name="persistenceUnitName" value="puMysql" />
<property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>        
<property name="jpaProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.max_fetch_depth">3</prop>
        <prop key="hibernate.jdbc.fetch_size">50</prop>
        <prop key="hibernate.jdbc.batch_size">10</prop>
        <prop key="hibernate.show_sql">true</prop>
    </props>        
</property>
</bean>
<jpa:repositories base-package="domain.data.repository"
entity-manager-factory-ref="emfMysql"
transaction-manager-ref="transactionManagerMysql"/>
<persistence-unit name="puMysql" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>domain.Mysqltable1</class>
<properties>
    <property name="hibernate.connection.datasource" value="jdbc/testdb1"/>
</properties>
</persistence-unit>
我得到一个例外:

创建在类路径资源[datasource tx jpa infrastructure.xml]中定义的名为“emfMysql”的bean时出错:设置bean属性“datasource”时无法解析对bean“jdbc/testdb1”的引用;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为“jdbc/testdb1”的bean

我希望有人能帮助我:


提前感谢

它说您在tomcat server.xml中定义的数据源资源不是spring中的bean。您应该像这样定义一个数据源bean:

<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>
对于emfMysql的datasource属性,使用这个bean而不是jndi名称


请参考此

非常感谢!我花了很长时间试图解决这个问题,这正是我所需要的: