ndlli 发表于 2017-2-6 06:08:10

配置了derby数据库后启动tomcat 服务报错

  在本应用中由于是以derby数据库作为数据存储,采用网络连接方式连接derby,在启动tomcat 服务是进行一些数据库的初始化工作,比如创建表之类的。
  所以就特地创建了一个servlet 去做这些初始化工作。
  在web.xml中配置如下:
  <web-app>
  ...
  <servlet>
  <servlet-name>derbynet</servlet-name>
  <servlet-class>org.apache.derby.drda.NetServlet</servlet-class>
  <init-param>
  <param-name>startNetworkServerOnInit</param-name>
  <param-value>true</param-value>
  <description>Starts the Network Server at servlet
  initialization if 'true'. </description>
  </init-param>
  <init-param>
  <param-name>portNumber</param-name>
  <param-value>1527</param-value>
  <description>Port number to use. The default is 1527.</description>
  </init-param>
  <init-param>
  <param-name>host</param-name>
  <param-value>localhost</param-value>
  <description> Host Name to use. The default is "localhost". Please secure any server which listens on a public address. </description>
  </init-param>
  <init-param>
  <param-name>tracingDirectory</param-name>
  <param-value />
  <description>Directory where trace files should be placed. </description>
  </init-param>
  <load-on-startup>true</load-on-startup>
  </servlet>
  <servlet>
  <servlet-name>InitializeDatabase</servlet-name>
  <servlet-class>com.sap.pf.prp.servlet.InitializeDatabase</servlet-class>
  <load-on-startup>0</load-on-startup>
  </servlet>
  ...
  </web-app>
  一切妥当之后,在eclipse下启动tomcat 服务,一切正常。
  但是当我启动tomcat目录下的startup.bat时,就报错了,信息如下:
  java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error c
  onnecting to server localhost on port 1527 with message Connection refused: conn
  ect.
  at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
  own Source)
  at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
  e)
  at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
  at java.sql.DriverManager.getConnection(DriverManager.java:582)
  at java.sql.DriverManager.getConnection(DriverManager.java:185)
  at com.sap.pf.prp.db.DBManager.getConnection(DBManager.java:56)
  at com.sap.pf.prp.db.DBManager.initDB(DBManager.java:27)
  at com.sap.pf.prp.servlet.InitializeDatabase.init(InitializeDatabase.jav
  a:13)
  at javax.servlet.GenericServlet.init(GenericServlet.java:212)
  at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.
  java:1139)
  at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:96
  6)
  at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex
  t.java:3956)
  at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
  230)
  at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
  at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
  at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
  at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443
  )
  at org.apache.catalina.core.StandardService.start(StandardService.java:4
  48)
  at org.apache.catalina.core.StandardServer.start(StandardServer.java:700
  )
  at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
  java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
  sorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
  Caused by: org.apache.derby.client.am.DisconnectException: java.net.ConnectExcep
  tion : Error connecting to server localhost on port 1527 with message Connection
  refused: connect.
  at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
  at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
  at org.apache.derby.client.am.Connection.<init>(Unknown Source)
  at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
  at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
  at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConne
  ction(Unknown Source)
  ... 24 more
  Caused by: java.net.ConnectException: Connection refused: connect
  at java.net.PlainSocketImpl.socketConnect(Native Method)
  at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
  at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
  at java.net.Socket.connect(Socket.java:529)
  at java.net.Socket.connect(Socket.java:478)
  at java.net.Socket.<init>(Socket.java:375)
  at java.net.Socket.<init>(Socket.java:189)
  at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:206)
  at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  ... 30 more
  Feb 11, 2015 1:34:10 PM org.apache.coyote.http11.Http11BaseProtocol start
  INFO: Starting Coyote HTTP/1.1 on http-80
  在网上搜了好一阵子,都没有找到真正的解决办法。
  https://db.apache.org/derby/docs/10.4/adminguide/tadmincbdjhhfd.html
  http://db.apache.org/derby/papers/DerbyTut/ns_intro.html
  http://stackoverflow.com/questions/10420902/data-sources-derby-connection-refused
  最后经过仔细的排查,发现其实是我自己的web.xml配置中【servlet启动优先级设置】的问题。
  只需要将derbynet中:
  <load-on-startup>true</load-on-startup> =====> <load-on-startup>0</load-on-startup>
  再将初始化数据库的那个servlet的load-on-startup 改为1 即:
  <load-on-startup>0</load-on-startup> ====> <load-on-startup>1</load-on-startup>
  改完了之后重新发布启动tomcat,一切正常。
页: [1]
查看完整版本: 配置了derby数据库后启动tomcat 服务报错