从 Spring 连接到 HSQL DB
Posted
技术标签:
【中文标题】从 Spring 连接到 HSQL DB【英文标题】:Connecting to HSQL DB from Spring 【发布时间】:2014-08-27 12:10:08 【问题描述】:我使用 Maven 插件启动 HSQL DB(我在集成测试中使用该 DB):
<plugin>
<groupId>com.btmatthews.maven.plugins.inmemdb</groupId>
<artifactId>inmemdb-maven-plugin</artifactId>
<version>1.4.3</version>
<configuration>
<monitorKey>inmemdb</monitorKey>
<monitorPort>11527</monitorPort>
</configuration>
<executions>
<execution>
<id>run</id>
<goals>
<goal>run</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<daemon>true</daemon>
<type>hsqldb</type>
<database>MY_DB</database>
<username>user1</username>
<password>111</password>
</configuration>
</execution>
<execution>
<id>stop</id>
<goals>
<goal>stop</goal>
</goals>
<phase>post-integration-test</phase>
</execution>
</executions>
</plugin>
当数据库启动并运行时,我可以创建 JDBC 连接:
Class.forName("org.hsqldb.jdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/MY_DB", "sa", "");
System.out.print(connection);
此代码打印:org.hsqldb.jdbc.JDBCConnection@2d22efc3
。
但是,当我尝试在 Spring 中使用相同的连接设置来配置数据源时,出现异常 (java.net.ConnectException: Connection refused
):
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001/MY_DB" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
我也试过username
:user1
和password
:111
,它产生另一个异常:org.hsqldb.HsqlException: invalid authorization specification - not found: user1
。
如何从 Spring 连接到这个数据库?
【问题讨论】:
春天你过得怎么样?请贴出相关代码。 您是否有机会使用 Spring 启动数据库?也许它还没起来。 @Darshan 在 Spring 配置中,我声明了我在问题中提供的数据源。然后我声明一个引用数据源的LocalContainerEntityManagerFactoryBean
。当 Spring 尝试创建这些 bean 时,它们会抛出异常。
@Stéphane 我不使用 Spring 启动数据库,而是使用 Maven 启动它。我知道 Spring 内置了对内存数据库的支持,但我不想使用它。我认为数据库已经启动,否则我可能无法创建 JDBC 连接。我还可以在 Maven 日志中看到数据库已启动。
我会得出结论,当您尝试从 spring 连接时,您的 hsql 数据库未启动。
【参考方案1】:
根据顾问的建议,我补充说,当您尝试从 Spring 连接时,您的 hsql db 没有运行。
【讨论】:
谢谢!我将启动嵌入式 Tomcat 并部署我的 Web 应用程序的 Maven 插件放在启动嵌入式数据库的插件之前。应用程序尝试连接到尚未启动的数据库。以上是关于从 Spring 连接到 HSQL DB的主要内容,如果未能解决你的问题,请参考以下文章
从另一个客户端连接到内存中的 HSQL 数据库(由 Spring 启动)
连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库