我收到以下异常
[Microsoft][SQLServer 2000 Driver for JDBC]Connection reset by peer: socket write error
当 Web 应用程序尝试通过网络访问位于另一台计算机上的数据库时,它会在应用程序服务器上发生。现在我已经阅读了一些关于此的帖子,并找到了许多不同的答案。一种是从
com.microsoft.jdbc.sqlserver.SQLServerDriver
升级到 jtds 驱动程序我们目前使用的驱动程序。有人说要更改池大小,有人说是网络防火墙关闭了连接。但是,这些帖子中的每个人都表示他们通过重新启动应用程序服务器解决了问题。但是我的问题有所不同,因为错误会偶尔弹出,导致一堆错误,然后消失,系统将正常工作。我与系统管理员交谈,他告诉我没有网络中断并坚持认为不是网络中断。
所以我的问题是,对于你们中已经解决了这个问题的人来说,哪种解决方案是最好的?我是否要升级驱动程序、更改连接池设置、在 hibernate 状态下升级到 C3P0?
下面是配置 hibernate 数据源的spring xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<property name="url" value="jdbc:microsoft:sqlserver://databasecomp.company.com:1433;databaseName=DBNAME;" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
这是此数据源的 Hibernate session 工厂的 Spring XML
<bean id="theSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="dataSource" ref="dataSource" />
<property name="useTransactionAwareDataSource" value="true" />
<property name="mappingResources">
<list>
<!-- Omitted for clarity -->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="connection.pool_size">1</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">false</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
</props>
</property>
另一个注意事项:此数据源仅准备就绪,如果这有助于使此问题更容易解决。
谢谢!
最佳答案
确保您拥有基础知识,例如主机名和端口。另外,请检查两端的防火墙是否没有干扰,即允许流量通过所需的端口。
TCP reset 表示对方有东西,但是连接被对方强行关闭,见here ,对我来说这似乎是典型的防火墙或 IPS 系统。如果所有这些基本检查都完成了,那么继续进行的最佳方法是升级您的软件,以防出现不明显的错误,然后重试。
关于sql-server - 对等错误导致的连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573315/