我正在尝试部署一个Spring Web应用程序,该应用程序依赖于另一个Spring应用程序(在本例中为jar),其中此jar具有所有域定义和数据库连接信息。我正在使用的数据库是带驱动程序的postgresql:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
在这种情况下,我遇到了这个错误:
2014-08-05 11:33:52,463 [http-8082-4] DEBUG org.hibernate.util.JDBCExceptionReporter - Cannot open connection [???]
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Can not create PoolableConnectionFactory (Connection refused. Verify that the hostname and port are correct and that the postmaster is accepting TCP / IP connections.)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:71)
我不知道这个错误发生了什么,因为在此更改之前,Web应用程序具有所有域和数据库连接信息。
我做的其他测试,如何将域类封装到一个jar中,由Web应用程序导入而没有连接信息,但在这种情况下,问题是entites没有发现任何事务管理器甚至执行何时在同一个Web应用程序中创建数据源。
正如您所看到的,我想要在模块中分离域模型,任何其他模块或项目都可以像依赖项一样使用它。
答案 0 :(得分:0)
错误消息告诉我您的webapp无法连接到数据库:postmaster
进程。
发生了什么事?
假设您已经知道数据库已移动,并且您已检查数据库是否正在运行,则可能是最后一种解释。
现在听起来您正试图从JAR文件中的文件(例如属性文件)中获取数据库连接详细信息。如果是这种情况,那么我会查找详细信息所在的问题。例如,如果您不小心在不同的JAR文件中有两个文件副本(具有不同的详细信息),那么数据库连接代码(很可能)将使用首先出现在webapp的有效类路径上的文件。如果这是错误的,您的webapp将使用错误的连接细节。
答案 1 :(得分:0)
最后,我让我的项目使用多个模块分发:
经过长时间的研究和很多问题(例如实体没有看到transactionManager),我对我的项目进行了以下更改:
Spring Web应用程序。
/WEB-INF/lib/domain-0.1.jar
- applicationContext.xml - Bean reference to HibernateJpaDialect
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="jpaDialect" ref="jpaDialect"/>
</bean>
在接下来的链接中,您可以找到有关此更改的更多说明。