我们使用以下Spring bean启动H2 Web服务器的(新)构建设置:
<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server"
factory-method="createWebServer" depends-on="dataSource" init-method="start"
lazy-init="false">
<constructor-arg value="-web,-webPort,8082" />
</bean>
这适用于其他三个开发人员(所有人都运行Mac或Linux),但是当我发现代码发生变化后Jetty重新启动时,我的Windows笔记本电脑上的穷人会遇到麻烦:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.h2.tools.Server-WebServer' defined in ServletContext resource [/WEB-INF/spring/appServlet/controllers.xml]:
Invocation of init method failed; nested exception is org.h2.jdbc.JdbcSQLException:
Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: JVM_Bind" [90061-154]
理论上说,当Jetty发出重启信号时,端口没有正确释放,和/或H2不会重新使用该端口。
现在我的问题:我该如何解决这个问题?我认为这是一个常见问题,但我找不到任何相关内容。
答案 0 :(得分:0)
查看您的配置,您似乎缺少destroy-method属性。试试这个:
<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server"
factory-method="createWebServer"
depends-on="dataSource"
init-method="start"
destroy-method="stop"
lazy-init="false">
<constructor-arg value="-web,-webPort,8082" />
</bean>