docker-compose运行springboot jdbc无法访问呢_刷新认知!h2database在springboot中的使用...

本文介绍了如何在SpringBoot项目中使用H2数据库,包括maven依赖配置、application.yml设置、内存与持久化数据库URL的区别。通过docker-compose运行SpringBoot应用,讨论了jdbc连接内存数据库时遇到的问题及解决方法,以及如何访问和管理H2数据库后台。此外,还展示了测试查询功能的实现,并提及了初始化SQL的执行情况。
摘要由CSDN通过智能技术生成

h2为轻量级数据库,使用特别方便,它可以不使用数据库服务器,直接嵌入到java程序中。可以配置持久化,同样也可以不持久化(数据在内存中)进程结束后,数据就释放,用做测试和演示特别方便。自带后台管理,非常方便,开源免费

  • 类库,使用maven简易安装
  • 可以同应用程序打包在一起发布
  • 可持久化,也可以直接基于内存不保留数据,适合于做单元测试

maven依赖#

org.springframework.boot            spring-boot-starter        org.springframework.boot            spring-boot-starter-web        org.projectlombok            lombok            truecom.h2database            h2            runtime1.4.193org.mybatis.spring.boot            mybatis-spring-boot-starter            2.1.1

application.yml配置#

server:  port: 8080spring:  datasource:    driver-class-name: org.h2.Driver#    schema: classpath:db/schema-h2.sql #初始化建表#    data: classpath:db/data-h2.sql #初始化数据#    url: jdbc:h2:mem:test   #不持久化,放在内存中    url: jdbc:h2:~/test    username: root    password: test  h2:    console:      path: /h2-console      enabled: true #必须配置,不然无法访问
  • 配置中提供了初始化数据库语句schema: classpath:db/schema-h2.sql
  • 配置中提供数据初始化语句data: classpath:db/data-h2.sql
  • 当然你也可以不初始化数据和表,在程序启动后,可以通过 localhost:8080/h2-console访问数据库管理后台。通过后台操作h2数据库
  • 持久化与否url: jdbc:h2:mem:test代表数据放置于内存中,这种适合做单元测试,一次性使用
    url: jdbc:h2:~/test 代表数据存放于 家目录/test中

启动Springboot应用类,访问http://localhost:8080/h2-console就可以使用数据库管理后台了

7454a2b59b6fb5f13e38d62959a858fb.png
be009687e23cf49056148dcf340d66bb.png
edb632e5050e036e3ced9bf7d0e78e96.png

测试查询功能#

完整代码参考:https://gitee.com/haimama/java-study/tree/master/h2db-demo-simple

  • Application.java
package demosimple.h2;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("demosimple.h2.mapper")public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class,args);    }}
  • TestController.java
package demosimple.h2.controller;import demosimple.h2.mapper.UserMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController {    @Autowired    UserMapper userMapper;    @GetMapping("/test")    public Object test(){        return userMapper.getById(1L);    }}
  • UserMapper.java
package demosimple.h2.mapper;import demosimple.h2.pojo.User;import org.apache.ibatis.annotations.Select;public interface UserMapper {    @Select("select * from user where id=#{id}")    public User getById(Long id);}
  • User.java
package demosimple.h2.pojo;import lombok.Data;@Datapublic class User {    private Long id;    private String name;    private Integer age;    private String email;}

访问http://localhost:8080/test 返回结果{"id":1,"name":"Jone","age":18,"email":"test1@baomidou.com"}

问题收集#

jdbc链接#

控制台默认链接是jdbc:h2:~/test,如果我们使用的是内存jdbc:h2:mem:test,需要将链接改为jdbc:h2:mem:test

内存链接报错#

当我们使用jdbc:h2:mem:test链接时,报如下错误

Database "mem:test" not found, and IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146 (Help)

这句话的意思是说数据库未找到。经查询,高版本的h2不再允许远程访问内存数据库,可以将maven依赖添加一个低版本的

    com.h2database        h2        runtime1.4.193

初始化sql执行#

  • 如果持久化到文件,也就是url: jdbc:h2:~/test,当应用再次启动时,初始化的sql不会再执行,并且操作后新增减的数据状态将一直保存
  • 如果数据库选择的是url: jdbc:h2:mem:test,每次启动时,数据都会重新初始化
  • 这里再补充一点儿前提,只有maven配置了 mybatis-spring-boot-starter 时,初始化的sql才会执行

原文链接:https://www.cnblogs.com/mxjhaima/p/13810479.html

如果觉得本文对你有帮助,可以转发关注支持一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值