【发布时间】: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 数据库未启动。
标签: spring hibernate jdbc hsqldb