数据源配置与使用

HikariCP

java-db 为了支持 HikariCP 内置了 HikariCpPlugin,下面讲解一下 如何使用 HikariCP

引入依赖

在项目的 pom.xml 文件中,需要引入以下依赖库:

<dependency>
  <groupId>com.litongjava</groupId>
  <artifactId>java-db</artifactId>
  <version>{java.db.version}</version>
</dependency>

<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>42.2.24</version>
</dependency>

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>4.0.3</version>
</dependency>

这里 java-db 提供了 ActiveRecordPlugin 的支持,postgresql 是 PostgreSQL 数据库驱动,HikariCP 是用于数据库连接池管理的库。

数据库配置

app.properties 文件中,配置 PostgreSQL 数据库连接信息:

DATABASE_DSN=postgresql://doadmin:123456@192.168.3.9:5432/defaultdb

DATABASE_DSN 是数据库连接的 Data Source Name (DSN),包括数据库类型、用户名、密码、主机地址、端口和数据库名。

数据源配置代码

以下是配置数据源、初始化数据库连接池、配置 HikariCpPlugin 和 ActiveRecordPlugin 的代码。

package com.litongjava.maxkb.config;

import com.jfinal.template.Engine;
import com.jfinal.template.source.ClassPathSourceFactory;
import com.litongjava.db.activerecord.ActiveRecordPlugin;
import com.litongjava.db.activerecord.OrderedFieldContainerFactory;
import com.litongjava.db.activerecord.dialect.PostgreSqlDialect;
import com.litongjava.db.hikaricp.HikariCpPlugin;
import com.litongjava.jfinal.aop.annotation.AConfiguration;
import com.litongjava.jfinal.aop.annotation.AInitialization;
import com.litongjava.tio.boot.server.TioBootServer;
import com.litongjava.tio.utils.dsn.DbDSNParser;
import com.litongjava.tio.utils.dsn.JdbcInfo;
import com.litongjava.tio.utils.environment.EnvUtils;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@AConfiguration
public class DbConfig {

  @AInitialization
  public void config() {
    // 获取数据库连接信息
    String dsn = EnvUtils.getStr("DATABASE_DSN");
    JdbcInfo jdbc = new DbDSNParser().parse(dsn);

    // 初始化 HikariCP 数据库连接池
    HikariCpPlugin hikariCpPlugin = new HikariCpPlugin(jdbc.getUrl(), jdbc.getUser(), jdbc.getPswd());
    hikariCpPlugin.start();

    // 初始化 ActiveRecordPlugin
    ActiveRecordPlugin arp = new ActiveRecordPlugin(hikariCpPlugin);

    // 开发环境下启用开发模式
    if (EnvUtils.isDev()) {
      arp.setDevMode(true);
    }

    // 是否展示 SQL
    boolean showSql = EnvUtils.getBoolean("jdbc.showSql", false);
    log.info("show sql:{}", showSql);
    arp.setShowSql(showSql);
    arp.setDialect(new PostgreSqlDialect());
    arp.setContainerFactory(new OrderedFieldContainerFactory());

    // 配置引擎
    Engine engine = arp.getEngine();
    engine.setSourceFactory(new ClassPathSourceFactory());
    engine.setCompressorOn(' ');
    engine.setCompressorOn('\n');

    // 启动 ActiveRecordPlugin
    arp.start();

    // 在应用销毁时停止数据库连接池
    TioBootServer.me().addDestroyMethod(() -> {
      arp.stop();
      hikariCpPlugin.stop();
    });
  }
}

代码说明

  1. DSN 解析:通过 DbDSNParser 解析 DSN 配置信息,得到 JdbcInfo 对象,用于初始化数据库连接池。
  2. HikariCP 初始化HikariCpPlugin 用于创建并启动数据库连接池。
  3. ActiveRecordPlugin:配置并启动 ActiveRecordPlugin,设置 PostgreSQL 方言 (PostgreSqlDialect) 及容器工厂 (OrderedFieldContainerFactory)。
  4. 引擎配置:通过 Engine 设置模板引擎的源和压缩策略。
  5. 销毁方法:应用关闭时停止数据库连接池及 ActiveRecordPlugin。

数据源配置单元测试

import org.junit.Test;
import com.litongjava.db.activerecord.Db;
import com.litongjava.tio.utils.environment.EnvUtils;

public class DbConfigTest {

  @Test
  public void test() {
    // 加载环境变量
    EnvUtils.load();

    // 执行数据库配置
    new DbConfig().config();

    // 执行简单的 SQL 查询测试
    for (int i = 0; i < 2; i++) {
      Db.queryInt("select 1");
    }
  }
}

测试说明

  1. 通过 EnvUtils.load() 加载环境变量,包括数据库连接配置。
  2. 使用 Db.queryInt() 方法执行简单的 SQL 查询,验证数据库连接池和 ActiveRecordPlugin 的正常运行。