h2 - h2数据库设置多连接模式出错

标签 h2

目前我在单连接模式下使用h2数据库。 以下是我当前的配置:

javax.persistence.jdbc.url=jdbc:h2:file:sql/xacml;MODE=MySQL

我想支持 h2 数据库的多个连接,并且我按照链接中提到的步骤操作: http://www.h2database.com/html/tutorial.html#using_server

我的新配置如下:

javax.persistence.jdbc.url=jdbc:h2:tcp://localhost/var/lib/servers/console/bin/sql/xacml;MODE=MySQL

但是,当我尝试访问初始化连接的 UI 页面时,出现以下异常:

[EL Info]: 2015-05-20 10:57:45.533--ServerSession(428804302)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Severe]: ejb: 2015-05-20 10:57:48.497--ServerSession(428804302)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: localhost" [90067-174]
Error Code: 90067
[EL Info]: 2015-05-20 10:57:48.502--ServerSession(428804302)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
May 20, 2015 10:57:48 AM com.vaadin.server.DefaultErrorHandler doDefault
SEVERE:
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: localhost" [90067-174]
Error Code: 90067
        at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:766)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302)
        at com.att.research.xacml.admin.XacmlAdminUI.init(XacmlAdminUI.java:278)
        at com.vaadin.ui.UI.doInit(UI.java:646)
        at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:214)
        at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:74)
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350)
        at com.att.research.xacml.admin.XacmlAdminUI$Servlet.service(XacmlAdminUI.java:235)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
        at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: localhost" [90067-174]
Error Code: 90067
        at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:331)
        at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:326)
        at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:138)
        at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
        at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:204)
        at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:741)
        at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:239)
        at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685)
        ... 35 more
Caused by: org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: localhost" [90067-174]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
        at org.h2.message.DbException.get(DbException.java:161)
        at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:417)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:305)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
        at org.h2.Driver.connect(Driver.java:73)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:208)
        at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:98)
        ... 40 more
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.h2.util.NetUtils.createSocket(NetUtils.java:119)
        at org.h2.util.NetUtils.createSocket(NetUtils.java:100)
        at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:100)
        at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:413)
        ... 47 more

有人可以告诉我如何让这个配置工作吗?

最佳答案

错误消息似乎表明 H2 服务器未启动。

当您使用 H2 服务器 URL 连接时,服务器必须先由您的应用程序或通过另一个 java 进程启动。

因此,由您决定将下面的魔术线放在哪里,启动 H2 服务器:

org.h2.tools.Server.createTcpServer('-tcpAllowOthers').start();

请确保您之前已经创建了 H2 数据库,并记住服务器 url 中的路径是相对于服务器启动位置的。因此,如果您将 H2 数据库放在启动 java 进程的位置,则只需要以下 url jdbc:h2:tcp://localhost/mydatabase

关于h2 - h2数据库设置多连接模式出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358759/

相关文章:

java - 为什么hibernate不将更改保存到数据库?

java - 为什么 h2 数据库驱动程序 (JPA) 不创建表,而 postgres 却创建表

java - 如何对使用 bpchar 的 h2 数据库进行单元测试?

java - 使用 Spring Integration JDBC 出站网关更新数据

java - 插入时间戳时 H2 org.h2.jdbc.JdbcSQLSyntaxErrorException

mysql - H2 不兼容的 SQL 命令

sql - 将最后的 'x' 结果保存在数据库中

java - 使用多个 "like"和 Pageable 创建 Spring Repository Select

Spring Boot 访问 H2 控制台

java - 表 "SYS": h2 database fails while inserting multiple records 中的并发更新