Hibernate在断开网络连接(断网)后运行抛出异常

    在开发Java Web项目的时候用到Hibernate,由于电脑平时都是连接网络的,所以一直没有什么问题。今天由于断网的缘故,使用Hibernate时抛出异常,如下:

 INFO [http-8080-1] Hibernate 3.0.5
 INFO [http-8080-1] hibernate.properties not found
 INFO [http-8080-1] using CGLIB reflection optimizer
 INFO [http-8080-1] using JDK 1.4 java.sql.Timestamp handling
 INFO [http-8080-1] configuring from resource: /hibernate.cfg.xml
 INFO [http-8080-1] Configuration resource: /hibernate.cfg.xml
ERROR [http-8080-1] problem parsing configuration/hibernate.cfg.xml
org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
	at org.dom4j.io.SAXReader.read(SAXReader.java:484)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1168)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
	at com.myproject.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
	at com.myproject.pic.PicInfo.getByKw(PicInfo.java:104)
	at com.myproject.servlet.MyServlet.doPost(MyServlet.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Nested exception: 
java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.Socket.connect(Socket.java:519)
	at java.net.Socket.connect(Socket.java:469)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
	at sun.net.www.http.HttpClient.New(HttpClient.java:306)
	at sun.net.www.http.HttpClient.New(HttpClient.java:323)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
	at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
	at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
	at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1168)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
	at com.myproject.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
	at com.myproject.pic.PicInfo.getByKw(PicInfo.java:104)
	at com.myproject.servlet.MyServlet.doPost(MyServlet.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

2013-12-13 13:55:01 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet MyServlet threw exception
org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
	at org.dom4j.io.SAXReader.read(SAXReader.java:484)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1168)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
	at com.myproject.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
	at com.myproject.pic.PicInfo.getByKw(PicInfo.java:104)
	at com.myproject.servlet.MyServlet.doPost(MyServlet.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Nested exception: 
java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.Socket.connect(Socket.java:519)
	at java.net.Socket.connect(Socket.java:469)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
	at sun.net.www.http.HttpClient.New(HttpClient.java:306)
	at sun.net.www.http.HttpClient.New(HttpClient.java:323)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
	at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
	at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
	at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1168)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
	at com.myproject.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
	at com.myproject.pic.PicInfo.getByKw(PicInfo.java:104)
	at com.myproject.servlet.MyServlet.doPost(MyServlet.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

    由于项目运行在本机服务器上,不用访问网络上的资源,所以不明白为什么会出现“java.net.ConnectException: Connection timed out: connect”异常,后来连接网络后,又恢复正常,经过试验,发现可能原因是使用Hibernate时,在hibernate配置文件和mapping文件中都需要联网下载*.dtd文件,如下:

① Hibernate Configuration文件头部

<!DOCTYPE hibernate-configuration PUBLIC 
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
② Hibernate Mapping文件头部

<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    为了避免在出现同样的问题,就直接将*.dtd文件都下载下来,保存在项目中新建的dtd文件夹中,并更改hibernate配置文件和mapping文件的头部信息,如下:
① 修改后的Hibernate Configuration文件头部

<!DOCTYPE hibernate-configuration PUBLIC 
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
	"http://127.0.0.1:8080/myproject/dtd/hibernate-configuration-3.0.dtd">

② 修改后的Hibernate Mapping文件头部

<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
	"http://127.0.0.1:8080/myproject/dtd/hibernate-mapping-3.0.dtd">
    这样,当解析hibernate配置文件和mapping文件时,下载*.dtd文件时都直接从项目中直接获取,即使断开网络连接也能正常运行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
在Spring Boot项目中,如果抛出异常后需要回滚SQL Server数据库,可以使用Spring的事务管理机制来实现。具体步骤如下: 1. 在Spring Boot项目中配置事务管理器,可以使用JdbcTransactionManager。在application.properties文件中添加以下配置: ``` spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=your_database spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.tomcat.max-active=10 spring.datasource.tomcat.max-idle=5 spring.datasource.tomcat.min-idle=2 spring.datasource.tomcat.initial-size=2 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp ``` 2. 在需要回滚的方法上添加@Transactional注解,表示该方法需要在事务中执行。如果该方法抛出异常,则会回滚事务。 ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Transactional public void addUser(User user) { userRepository.save(user); if (user.getId() == null) { throw new RuntimeException("Failed to add user"); } } } ``` 在上面的代码中,如果添加用户失败,则会抛出RuntimeException,事务会回滚,数据库中不会保存该用户的记录。 需要注意的是,如果在同一个方法中操作多个数据源,需要使用多个事务管理器来管理事务。可以使用@Qualifier注解指定要使用的事务管理器。 ``` @Service public class UserServiceImpl implements UserService { @Autowired @Qualifier("transactionManager1") private PlatformTransactionManager transactionManager1; @Autowired @Qualifier("transactionManager2") private PlatformTransactionManager transactionManager2; @Transactional("transactionManager1") public void addUserToDataSource1(User user) { // 操作数据源1 } @Transactional("transactionManager2") public void addUserToDataSource2(User user) { // 操作数据源2 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值