数据库后端
基本信息
| 属性 | 值 |
|---|---|
| 工厂 | DynmapCore.java:430-449 |
| 抽象基类 | org.dynmap.storage.MapStorage |
| 配置位置 | configuration.txt:22-35 的 storage: 段 |
| 后端实现类数 | 6(其中 5 个可由工厂分派) |
各后端连接方式
每个后端在 checkDriver() 中拼装 JDBC 连接串并反射加载驱动:
| 后端 | 连接串 | 驱动类 | 源码行 |
|---|---|---|---|
| MySQL | jdbc:mysql://<hostname>:<port>/<database><flags> |
Class.forName(classname)(变量) |
MySQLMapStorage.java:290、:331 |
| MariaDB | jdbc:mariadb://<hostname>:<port>/<database><flags> |
org.mariadb.jdbc.Driver |
MariaDBMapStorage.java:14、:17 |
| PostgreSQL | jdbc:postgresql://<hostname>:<port>/<database><flags> |
org.dynmap.org.postgresql.Driver(重定位后的内置驱动) |
PostgreSQLMapStorage.java:309、:312 |
| Microsoft SQL | jdbc:sqlserver://<hostname>:<port>;databaseName=<database><flags> |
Class.forName(classname)(变量) |
MicrosoftSQLMapStorage.java:281、:322 |
| SQLite | jdbc:sqlite:<databaseFile> |
org.sqlite.JDBC |
SQLiteMapStorage.java:291、:294 |
| filetree | 无 JDBC(直接文件树) | — | FileTreeMapStorage.java |
PostgreSQLMapStorage.java:312 的注释原文为 “Use shaded name for our bundled driver”——PostgreSQL 驱动被 shade 重定位进 mod jar,与 gradle.properties 的 relocateShadowedDependencies = true 一致。
继承关系
MariaDBMapStorage(24 行)继承 MySQLMapStorage(1274 行),只覆写 checkDriver() 一处(MariaDBMapStorage.java:12-23):换用 jdbc:mariadb:// 连接串前缀,并检测 org.mariadb.jdbc.Driver;找不到时记录 MariaDB-JDBC classes not found - MariaDB data source not usable 并返回 false(:19-20)。这解释了它为何远小于 MySQL 实现。
MicrosoftSQLMapStorage(1133 行)则直接 extends MapStorage(MicrosoftSQLMapStorage.java:34),是独立实现。
未注册的后端
MicrosoftSQLMapStorage 在全仓范围内除自身文件外无任何引用:grep -rn 'MicrosoftSQLMapStorage\|mssql' --include=*.java src/main/java 的全部命中都落在 storage/mssql/MicrosoftSQLMapStorage.java 内部。工厂 DynmapCore.java:430-449 没有 mssql 分支,configuration.txt:18-21 的可选值注释也只列出 filetree / sqlite / mysql。
因此该后端无法通过配置启用。仓库中未找到注释说明保留原因,此处仅记录"存在但无注册路径"这一事实,不判定为缺陷。
数值
| 数值名 | 值 |
|---|---|
| 后端实现类数 | 6 |
| 工厂可分派后端数 | 5 |
| 最大实现(MySQL) | 1274 行 |
| 次大(PostgreSQL) | 1195 行 |
| Microsoft SQL | 1133 行(不可启用) |
| SQLite | 1088 行 |
| filetree | 691 行 |
| MariaDB | 24 行(继承 MySQL) |
配置
configuration.txt:22-35 的 storage: 段提供三组示例,仅 filetree 生效:
| 段 | 生效 | 键 |
|---|---|---|
configuration.txt:25-26 |
是 | type: filetree |
configuration.txt:27-28 |
否(注释) | #type: sqlite、#dbfile: dynmap.db |
configuration.txt:29-36 |
否(注释) | #type: mysql + hostname / port / database / userid / password / prefix |
configuration.txt:20 对 sqlite 的注释原文为 “single SQLite database file (this can get VERY BIG)”。
仓库 README.md “Other tips” 一节另提示:文件开头被注释的 port 键用于数据库引擎存储场景。
PHP 侧的直连实现
extracted/web/standalone/ 下另有一套绕过 Java 服务端、直接连数据库的 PHP 实现(详见 网页前端资源):MySQL_access.php / MySQL_tiles.php / MySQL_markers.php 等 9 个 MySQL 文件、9 个 PostgreSQL 文件,以及 SQLite_markers.php / SQLite_tiles.php。
相关条目
- 地图存储 — 工厂与抽象基类
- configuration.txt —
storage:段原文 - 网页前端资源 —
standalone/PHP 直连实现