【问题标题】:Database lock acquisition failure when using HSQLDB in Spring BootSpring Boot中使用HSQLDB时获取数据库锁失败
【发布时间】:2021-05-22 11:32:11
【问题描述】:

我的测试 application.yml 如下:

 spring:
  datasource:
    url: jdbc:hsqldb:hsql:/localhost:9001/db/test
    driverClassName: org.hsqldb.jdbcDriver
    username: root
    password:
  jpa:
    show-sql: false
    hibernate:
      ddl-auto: create-drop
      use-new-id-generator-mappings: false

Db 连接配置类如下:

@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
@EntityScan("com.x.project")
@EnableJpaRepositories("com.x.project")
public class DatabaseConfiguration {

    @Value("${spring.datasource.driverClassName}")
    private String driverClassName;

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        return new HikariDataSource(hikariConfig());
    }

    private HikariConfig hikariConfig() {
        HikariConfig config = new HikariConfig();
        config.setDriverClassName(driverClassName);
        config.setJdbcUrl(url);
        config.setUsername(username);
        config.setPassword(password);
        config.setPoolName("my db pool");
        config.setMaximumPoolSize(2);
        return config;
    }
}

由于我是 HSQLDB 新手,我不确定在使用 jdbc:hsqldb:hsql:/localhost:9001/db 之类的 URL 时是否需要下载 hsqldb 服务器。

我得到的错误是:

原因:org.hsqldb.HsqlException: 获取数据库锁 失败:lockFile: org.hsqldb.persist.LockFile@2e637605[file =null, 存在=假,锁定=假,有效=假,] 方法:setPath 原因: java.io.IOException:

我应该如何解决这种情况?

【问题讨论】:

  • 这能回答你的问题吗? Database lock acquisition failure and hsqldb
  • 请发布完整的异常堆栈跟踪
  • 您的 jdbc-url 意味着在“服务器模式”下使用 hsql(替代方案是:“文件”和“内存”)。异常消息让我们假设数据库已经被锁定。 (通过正在运行/过时的进程)
  • @xerx593 如果在服务器模式下使用,我应该下载 hsqldb 服务器并从 cmd 运行吗? (因为我已经尝试过但无法解决)。我刚从 intellij 运行,但是当唯一的连接器是 intellij 时,什么会锁定数据库?
  • 如果你这样问:1. 你应该使用文件/内存模式!;) 2. 杀死(未识别的 java)进程,清理文件系统(db/test 可能在某个地方) ...baledung has an article,它展示了如何在“独立/服务器模式”下使用它,对于嵌入式使用,您只需要更改 url(第 3.2 节 ...并且 不要 开始一个服务器,但只需将 jar 打包到嵌入应用程序中)。

标签: java spring spring-boot hsqldb


【解决方案1】:

我不确定这对你来说是否仍然是一个问题,但对于未来,我应该注意:

 A backslash missing here:
 jdbc:hsqldb:hsql:/localhost:9001/db/test

所以应该是这样的:

jdbc:hsqldb:hsql://localhost:9001/db/test

你可以这样创建数据库:

 java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:db;user=root;password=pass;hsqldb.lock_file=false --dbname.0 db
 
     

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 2011-04-27
    • 2013-09-05
    • 1970-01-01
    • 2013-04-16
    • 2014-12-27
    • 1970-01-01
    • 2016-10-02
    • 2022-07-09
    相关资源
    最近更新 更多