springboot启动时加载数据到缓存_Spring Boot 缓存之内嵌H2数据库,内附GitHub源码

本文详细介绍了如何将H2数据库集成到Spring Boot项目中作为缓存使用,包括H2数据库的简介、运行模式、优势以及具体集成步骤。通过配置多数据源和实现缓存接口,实现了数据启动时加载到缓存的功能。
摘要由CSDN通过智能技术生成

话不多说,本文手把手教你 怎么用 H2 数据库当做缓存来使用增强系统性能

一、H2 简介

1、H2数据库是一个开源的关系型数据库。H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准

2、提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面

数据库管理界面

57c5e45d816686e643f23431c9b2ccc3.png

官网: http://www.h2database.com/

二、H2 运行模式

H2有三种运行模式。

1、内嵌模式(Embedded Mode)

内嵌模式下,应用和数据库同在一个JVM中,通过JDBC进行连接。 可持久化,但同时只能一个客户端连接。内嵌模式性能会比较好。

2、服务器模式(Server Mode)

使用服务器模式和内嵌模式一样,只不过它可以跑在另一个进程里

3、 混合模式

第一个应用以内嵌模式启动它,对于后面的应用来说它是服务器模式跑着的。混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。第一个应用的本地连接与嵌入式模式的连接性能一样的快,而其它连接理论上会略慢。

三、H2 优势

  • 纯Java编写,不受平台的限制;
  • 只有一个jar文件,适合作为嵌入式数据库使用;
  • h2提供了一个十分方便的web控制台用于操作和管理数据库内容;
  • 功能完整,支持标准SQL和JDBC。麻雀虽小五脏俱全;
  • 支持内嵌模式、服务器模式和集群。
  • 占用空间小:大约1.5 MB JAR文件大小
  • 速度快

其他数据库的比较

595f663782a3b7d9df556679301d6b5c.png

四、H2 集成SpringBoot 项目

一般情况下我们都会已经有一个数据源了,H2 也是一个数据库,所以我们需要配置多数据源

首先: 在 application.properties 中增加如下内容

spring.datasource.h2.url=jdbc:h2:file:~/.h2/h2spring.datasource.h2.username=spring.datasource.h2.password=spring.datasource.h2.driver-class-name=org.h2.Driver

file: 后面是文件的路径地址

~ 代表当前用户目录

然后: 在原有数据源配置上增加 @Primary 注解

作为主要数据源

最后: 增加H2数据源配置

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;@Configurationpublic class H2DataSourceConfig { @Bean(name = "h2") @Qualifier("h2") @ConfigurationProperties(prefix="spring.datasource.h2") DataSource h2(){ return DataSourceBuilder.create().build(); } @Bean(name = "h2JdbcTemplate") JdbcTemplate h2JdbcTemplate(@Autowired @Qualifier("h2") DataSource h2){ return new JdbcTemplate(h2); }}

五、定义缓存接口规范

先定义一个标准的缓存接口类

public interface CacheService { String getValue(String key); boolean hasKey(String key); void setValue(String key, String val); void setValue(String key, String val, long seconds);}

六、实现H2 的缓存

初始化

@PostConstruct public void init() { // 验证数据库是否存在 String createTableSql = "CREATE CACHED TABLE PUBLIC.MAP(" + " KEY TEXT NOT NULL," + " VALUE TEXT," + " EXPIRE LONG" + ")"; List> list = h2JdbcTemplate.queryForList("SELECT t.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES t WHERE TABLE_SCHEMA = 'PUBLIC' and TABLE_NAME = 'MAP' LIMIT 1"); if (list == null || list.isEmpty()) { logger.info("auto create table execute sql > " + createTableSql); h2JdbcTemplate.update(createTableSql); } Thread thread = new Thread() { @Override public void run() { while (true) { try { // 查询缓存数量 Map map = h2JdbcTemplate.queryForMap("select count(*) as total from map"); long total = (long) map.get("total"); // 清除过期的缓存数据 long date = System.currentTimeMillis() / 1000; int rows = h2JdbcTemplate.update("delete from map where expire <= ?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值