Heroku的Spring MVC Hibernate模板应用程序没有连接到DB

时间:2012-11-16 22:38:38

标签: jpa spring-mvc heroku

我正在尝试运行示例应用程序,但在尝试连接到db时遇到以下错误:

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?)是否需要以特定模式/配置文件启动,这可能是数据库连接未打开的原因吗? 我也在学习Heroku。

1 个答案:

答案 0 :(得分:3)

您是否尝试在本地计算机上运行应用程序?为了能够在本地计算机上运行此示例项目,您需要创建数据库。教程中没有描述它,但如果您尝试使用示例DATABASE_URL(postgres://scott:tiger@localhost/myapp),则需要创建密码为scott的用户tiger并创建数据库myapp并授予{{ 1}}所需的权限。我做了什么,我用现有的scott用户创建了sampledb数据库,因为它是数据库管理员,我不需要打扰授权,只需更改网址

postgres