从 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:user1password: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 数据库

JPA 正在连接到一个不存在的 HSQL 数据库?

如何将 HSQL DB Manager 连接到嵌入式数据库

如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询

关于内存数据库中HSQL DB的问题