spring - Spring Boot 应用程序中的 H2 架构为空

标签 spring spring-boot h2

我正在设置一个准系统 Spring Boot 项目 described here我在基本设置方面遇到了问题。

似乎 DatabaseLoader 没有被调用,当我打开该项目的 H2 控制台时,我没有看到包含 Employee 表的模式。

这是我的 pom.xml 的相关部分:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <!-- 
        <scope>runtime</scope>
         -->
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.4</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

我的域名:

@Data
@Entity
public class Employee {
    private @Id @GeneratedValue Long id;
    private String firstName;
    private String lastName;
    private String description;

    public Employee() {}

    public Employee(String firstName, String lastName, String description) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.description = description;
    }

}

以及数据库加载器: 公共(public)类 DatabaseLoader 实现 CommandLineRunner { 私有(private)最终 EmployeeRepository 存储库;

    @Autowired
    public DatabaseLoader(EmployeeRepository repository) {
        this.repository = repository;
    }

    @Override
    public void run(String... strings) throws Exception {
        this.repository.save(new Employee("duke", "earl", "dude"));
    }

}

应用程序在 localhost:8080/console 启动后导航到控制台会显示 jdbc:h2:~/test 仅包含 INFORMATION_SCHEMA 和用户菜单。我还将其设置为 CRUD 存储库,虽然我可以发布到它,但似乎没有保存任何属性数据,但可以识别员工资源。

POST:{"firstName": "Bilbo", "lastName": "Baggxins", "description": "burglar"}

返回:

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/api/employees/4"
    },
    "employee": {
      "href": "http://localhost:8080/api/employees/4"
    }
  }
}

最佳答案

Spring Boot 的默认 h2 url 为:jdbc:h2:mem:testdb

要使用jdbc:h2:~/test,您必须将其添加到application.properties中:

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:~/test

发生的情况是,您正在将 Employee 写入 spring-boot 的内存数据库(testdb)中。然后,您将 h2 控制台打开到 jdbc:h2:~/test,它会动态创建它,并让您浏览空白。

通过spring.h2.console.enabled=true,您可以打开浏览器到http://localhost:8080/h2-console并查看数据库内容。使用以下设置:

  • 已保存的设置:通用 H2(嵌入式)
  • 驱动程序类:org.h2.Driver
  • 网址:jdbc:h2:mem:testdb
  • 用户名:sa
  • 密码:

关于spring - Spring Boot 应用程序中的 H2 架构为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070253/

相关文章:

spring - 无法在事务中间更改事务只读属性

java - IntelliJ IDE 中带有@RequiredArgsConstructor 错误的实体

postgresql - 测试 : Best embedded database to use

mysql - hibernate ManyToOne 关系对象中的 GWT rpc.SerializationException

mysql - 如何使用Spring Boot通过Postman操作数据

java - Spring 的@Scheduled 注解是如何工作的?

java - 当有两个用@Qualifier定义的候选者时,Spring如何决定注入(inject)哪个bean?

spring-boot - HystrixCommand 注解在用于包装 Spring Integration Gateway 调用时不起作用

mysql - CURRENT_TIMESTAMP 在 h2 中以毫秒为单位

java - 如何将H2数据库文件存储到项目目录中