0

サンプル アプリケーションを実行しようとしていますが、データベースに接続しようとすると次のエラーが発生します。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)

私は applicationContext.xml を変更していません。特定の部分は次のとおりです。

    <beans profile="default">
    <jdbc:embedded-database id="dataSource"/>        
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>
</beans>

<beans profile="prod">
    <bean class="java.net.URI" id="dbUrl">
        <constructor-arg value="#{systemEnvironment['DATABASE_URL']}"/>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + @dbUrl.getPath() }"/>
        <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/>
        <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!-- change this to 'verify' before running as a production app -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
</beans>

ラップトップから pgAdmin III を使用してデータベースに接続できます。また、私はSpringを学んでおり、いくつかのBeanがプロファイル「prod」にラップされているのを見ていますが、特定のプロファイルを使用するコードまたはweb.xmlのどこにもわかりません。アプリケーション サーバー (Heroku?) は特定のモード/プロファイルで起動する必要がありますか?それが原因で db 接続が開かないのでしょうか? Herokuも勉強中です。

4

1 に答える 1

3

ローカルマシンでアプリケーションを実行しようとしていますか?このサンプルプロジェクトをローカルマシンで実行できるようにするには、データベースを作成する必要があります。チュートリアルでは説明されていませんが、サンプルのDATABASE_URL()を使用する場合は、パスワードを使用しpostgres://scott:tiger@localhost/myappてユーザーを作成し、データベースを作成して、必要な権限を付与する必要があります。私がやったことは、既存のユーザーでデータベースを作成したことです。データベース管理者なので、助成金を気にする必要はなく、URLを次のように変更するだけです。scotttigermyappscottsampledbpostgres

export DATABASE_URL=postgres://postrges:<password>@localhost/sampledb

于 2012-12-06T12:57:42.910 に答える