Apache Jackrabbit 配置参数详解
详解 Apache Jackrabbit 2.22.5 的核心配置:repository.xml 各节点(DataStore/Security/Persistence/Versioning/SearchIndex/Cluster)、standalone 启动参数、web.xml servlet 映射、日志配置与 JVM 堆参数,含生产配置模板。
Apache Jackrabbit 配置参数详解
目标:梳理 Apache Jackrabbit 2.22.5(standalone 发行版)的全部配置层次——仓库级
repository.xml、启动参数、Servlet 映射(web.xml)、运行日志与 JVM 堆参数,并给出可直接套用的生产配置模板。所有参数说明均结合/opt/data/jackrabbit实测运行环境验证。
一、环境信息
- 组件:Apache Jackrabbit
2.22.5(jackrabbit-standalone-2.22.5.jar) - 配置文件:
/opt/apache-jackrabbit/conf/repository.xml(抽取自 jar,实测副本repository-fs.xml) - 仓库数据目录:
/opt/data/jackrabbit/ - 运行日志:
/opt/data/jackrabbit/log/jackrabbit.log、access.log.<日期> - 启动方式:
java -jar ... -c <conf> -r <repo>,JVM 堆-Xms256m -Xmx512m -Xmn128m - 持久化:workspace/version 均用
BundleFsPersistenceManager(文件存储,替代默认 Derby)
二、前置条件
- 已按《Ubuntu 22.04 安装 Apache Jackrabbit 2.22.5 指南》完成部署;本文所有命令在 JDK 17(
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64)下运行。 - 配置改动后需重启服务:
# 后台重启(演示命令,路径与本环境一致)
cd /opt/apache-jackrabbit
nohup $JAVA_HOME/bin/java -jar jackrabbit-standalone-2.22.5.jar \
-c /opt/apache-jackrabbit/conf/repository-fs.xml \
-r /opt/data/jackrabbit > /tmp/jr.log 2>&1 &
三、参数查看与修改方式
💡 变量取值说明:
repository.xml中出现的${rep.home}、${wsp.name}、${wsp.home}是 Jackrabbit 内置变量,不是未赋值占位符——${rep.home}由启动参数-r <仓库目录>解析(本环境为/opt/data/jackrabbit),${wsp.name}为 workspace 名、${wsp.home}为${rep.home}/workspaces/<name>,均无需手工替换。
Jackrabbit 2.x standalone 的配置分布:
| 层次 | 文件 | 查看 | 修改 |
|---|---|---|---|
| 仓库核心 | conf/repository.xml | 直接 cat | 改后重启 |
| Servlet/端点 | jar 内 WEB-INF/web.xml(不可直接改) | unzip -p jar WEB-INF/web.xml | 自建 webapp 部署时才需要 |
| WebDAV IO/属性 | jar 内 WEB-INF/config.xml | unzip -p jar WEB-INF/config.xml | 同上 |
| 启动参数 | 命令行 -c/-r/-p/-h 等 | java -jar ... --help | 启动命令行 |
| JVM 堆 | 命令行 -Xms/-Xmx 或 systemd/Compose 注入 | jps -v | 启动命令/unit/Compose |
| 日志 | 仓库目录 log/,logback 配置打包在 jar 内 | 查看 jackrabbit.log | -d 调试开关等 |
四、参数总览
4.1 standalone 启动参数(--help 实测)
usage: java -jar jackrabbit-standalone-2.22.5.jar [-?] [-b] [-c <arg>] [-C
<arg>] [-d] [-f <arg>] [-h <arg>] [-i <arg>] [-l] [-n] [-p <arg>]
[-q] [-r <arg>] [-R <arg>]
-?,--help print this message
-b,--backup create a backup of the repository
-c,--conf <arg> repository configuration file
-C,--backup-conf <arg> backup repository configuration file
-d,--debug enable debug logging
-f,--file <arg> location of this jar file
-h,--host <arg> IP address of the HTTP server
-i,--cli <arg> command line access to a remote repository
-l,--license print license information
-n,--notice print copyright notices
-p,--port <arg> TCP port of the HTTP server (8080)
-q,--quiet disable console output
-r,--repo <arg> repository directory (jackrabbit)
-R,--backup-repo <arg> backup repository directory (jackrabbit-backupN)
4.2 repository.xml 顶层元素总览
| 顶层元素 | 作用 | 实测默认实现 |
|---|---|---|
<DataStore> | 二进制数据存储 | FileDataStore |
<Security> | 安全配置(SecurityManager/AccessManager/LoginModule) | DefaultSecurityManager + DefaultAccessManager + DefaultLoginModule |
<Workspaces> | workspace 根目录与默认 workspace | rootPath=${rep.home}/workspaces、defaultWorkspace=default |
<Workspace> | workspace 模板(file system / persistence / search index) | LocalFileSystem + BundleFsPersistenceManager(本环境)+ SearchIndex |
<Versioning> | 版本管理存储 | LocalFileSystem + BundleFsPersistenceManager |
<SearchIndex> | 仓库级全文索引(jcr:system 树、版本) | lucene.SearchIndex |
<Cluster> | 集群 journal | MemoryJournal(单机默认) |
4.3 Servlet 端点映射(web.xml 实测)
| Servlet | URL 模式 | 用途 |
|---|---|---|
Repository(RepositoryAccessServlet) | 无映射,启动加载 | 把 javax.jcr.Repository 绑到 ServletContext |
Webdav(SimpleWebdavServlet) | /repository/* | 标准 WebDAV:PROPFIND/MKCOL/PUT/GET |
JCRWebdavServer(JcrRemotingServlet,即 davE) | /server/* | JCR Remoting:workspace 概览、jcr:root XML/JSON 读写 |
| RMI(RemoteBindingServlet) | /rmi | 默认注释关闭 |
五、核心参数分类详解
5.1 DataStore 段
<DataStore class="org.apache.jackrabbit.core.data.FileDataStore"/>
| 参数 | 说明 | 默认 |
|---|---|---|
class | 数据存储实现 | org.apache.jackrabbit.core.data.FileDataStore(文件系统);生产可换 DbDataStore(数据库) |
path(可选) | 存储目录(不设时在 repo home 下自动生成) | 自动 |
5.2 Security 段
<Security appName="Jackrabbit">
<SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security"/>
<AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager"/>
<LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
<param name="anonymousId" value="anonymous"/>
<param name="adminId" value="admin"/>
</LoginModule>
</Security>
| 参数 | 说明 | 默认 |
|---|---|---|
appName | 安全上下文名 | Jackrabbit |
SecurityManager/@workspaceName | 存放用户/权限的安全 workspace | security |
LoginModule/@anonymousId | 匿名用户 ID | anonymous |
LoginModule/@adminId | 管理员用户 ID(默认密码 admin,首次登录后可改) | admin |
💡 实测默认管理员为
admin/admin;本系列环境已通过 JCRUserManager.changePassword()改为admin/q1w2e3r4,改动持久化在安全 workspace。
5.3 Workspaces 与 workspace 模板段
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
<Workspace name="${wsp.name}">
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${wsp.home}"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${wsp.home}/index"/>
<param name="supportHighlighting" value="true"/>
</SearchIndex>
</Workspace>
| 参数 | 说明 | 默认/示例 |
|---|---|---|
Workspaces/@rootPath | workspace 目录根 | ${rep.home}/workspaces |
Workspaces/@defaultWorkspace | 默认 workspace 名 | default |
Workspace/@name | 模板占位(按 workspace 名实例化) | ${wsp.name} |
FileSystem/@path | workspace 文件系统目录 | ${wsp.home} |
PersistenceManager/@class | 节点/属性持久化实现 | 默认 DerbyPersistenceManager;本环境 BundleFsPersistenceManager |
PersistenceManager/url | Derby 的 JDBC URL(用文件持久化时删除) | jdbc:derby:${wsp.home}/db;create=true |
SearchIndex/@path | Lucene 索引目录 | ${wsp.home}/index |
supportHighlighting | 高亮支持 | true |
⚠️ 重要:默认
DerbyPersistenceManager在 standalone 2.22.5 下会因缺 Derby 驱动启动失败,务必替换为BundleFsPersistenceManager并删除url、schemaObjectPrefix参数(详见安装指南 5.2)。
5.4 Versioning 段
<Versioning rootPath="${rep.home}/version">
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${rep.home}/version"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
</Versioning>
| 参数 | 说明 | 默认/示例 |
|---|---|---|
Versioning/@rootPath | 版本存储根 | ${rep.home}/version |
FileSystem/@path | 版本文件系统目录 | ${rep.home}/version |
PersistenceManager/@class | 版本持久化实现 | 默认 Derby;本环境 BundleFsPersistenceManager |
5.5 SearchIndex(仓库级)段
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${rep.home}/repository/index"/>
<param name="supportHighlighting" value="true"/>
</SearchIndex>
仓库级索引覆盖 /jcr:system 树(主要是版本节点)。
5.6 Cluster 段
<Cluster id="node1">
<Journal class="org.apache.jackrabbit.core.journal.MemoryJournal"/>
</Cluster>
| 参数 | 说明 | 默认 |
|---|---|---|
Cluster/@id | 节点 ID(集群多节点时全局唯一) | node1 |
Journal/@class | 集群 journal 实现 | MemoryJournal(单机);集群换 org.apache.jackrabbit.core.journal.DatabaseJournal / FileJournal |
5.7 JVM 堆参数
| 参数 | 含义 | 本环境取值 |
|---|---|---|
-Xms | 初始堆大小 | 256m |
-Xmx | 最大堆大小 | 512m |
-Xmn | 新生代大小 | 128m |
三种托管形态的修改位置:
- 命令行启动:直接写在
java后(见二)。 - systemd 托管:
[Service]
Environment=JAVA_OPTS=-Xms256m -Xmx512m -Xmn128m
ExecStart=/usr/lib/jvm/java-17-openjdk-amd64/bin/java $JAVA_OPTS -jar /opt/apache-jackrabbit/jackrabbit-standalone-2.22.5.jar -c /opt/apache-jackrabbit/conf/repository-fs.xml -r /opt/data/jackrabbit
- Docker Compose 托管:见《Apache Jackrabbit Docker Compose 部署指南》的
environment: JAVA_TOOL_OPTIONS。
验证生效值:
$JAVA_HOME/bin/jps -v | grep jackrabbit
实测回显:
5134 jackrabbit-standalone-2.22.5.jar -Xms256m -Xmx512m -Xmn128m
5.8 日志参数
- 应用日志:
/opt/data/jackrabbit/log/jackrabbit.log(logback 配置内嵌于 jar,默认 INFO)。 - 访问日志:
/opt/data/jackrabbit/log/access.log.<日期>,每行一条 HTTP 记录:
127.0.0.1 - - [11/Oct/2026:11:14:42 +0000] "MKCOL /repository/default/mydocs HTTP/1.1" 201 0 "-" "curl/7.81.0"
- 启动加
-d,--debug可开启调试日志;-q,--quiet关闭控制台输出。
六、生产配置模板
适用场景:8GB 内存、SATA/SSD 磁盘、中小规模内容管理(数千用户、百万级节点)、单机部署。
<?xml version="1.0"?>
<!DOCTYPE Repository
PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.0//EN"
"http://jackrabbit.apache.org/dtd/repository-2.0.dtd">
<Repository>
<DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
<param name="path" value="${rep.home}/repository/datastore"/>
</DataStore>
<Security appName="Jackrabbit">
<SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security"/>
<AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager"/>
<LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
<param name="anonymousId" value="anonymous"/>
<param name="adminId" value="admin"/>
</LoginModule>
</Security>
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
<Workspace name="${wsp.name}">
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${wsp.home}"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${wsp.home}/index"/>
<param name="supportHighlighting" value="true"/>
</SearchIndex>
</Workspace>
<Versioning rootPath="${rep.home}/version">
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${rep.home}/version"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
</Versioning>
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${rep.home}/repository/index"/>
<param name="supportHighlighting" value="true"/>
</SearchIndex>
<Cluster id="node1">
<Journal class="org.apache.jackrabbit.core.journal.MemoryJournal"/>
</Cluster>
</Repository>
配套启动(JVM 堆 256–512MB):
nohup $JAVA_HOME/bin/java -Xms256m -Xmx512m -Xmn128m \
-jar jackrabbit-standalone-2.22.5.jar \
-c /opt/apache-jackrabbit/conf/repository-fs.xml \
-r /opt/data/jackrabbit > /tmp/jr.log 2>&1 &
💡 磁盘规划:
workspaces/<ws>/db(BundleFs 块存储)、repository/datastore(二进制)、repository/index(Lucene 索引)、version(版本库)分区或分盘可提升 IO 隔离;索引可放 SSD。
七、常见问题
Q1:改 repository.xml 后节点/属性不生效?
修改必须落在 <PersistenceManager> 等关键节点,并重启服务;若从 Derby 切到 BundleFs,旧 Derby 数据不可直接迁移,需重新建库或做 XML 导出导入。
Q2:anonymousId/adminId 改了但登录不了?
安全 workspace 里已存在的用户与 adminId 参数相互独立;改参数只影响新用户解析。生产上建议保留 adminId=admin,用 JCR API 管理真实用户密码。
Q3:jps -v 看不到 -Xmx?
可能堆参数没传给目标 JVM(如 systemd 变量未展开、Compose 变量拼写错误)。直接改启动命令行并重启验证。
Q4:集群 journal 用 MemoryJournal 是否会丢数据?
单机无碍;集群多节点必须换 DatabaseJournal(共享 DB)或 FileJournal(共享文件系统),否则节点间不同步。
八、参考链接
- Jackrabbit 配置文档(2.x):https://jackrabbit.apache.org/archive/jcr-2.0/jackrabbit-2.22/config.html
- repository.dtd:https://jackrabbit.apache.org/dtd/repository-2.0.dtd
- Jackrabbit 下载:https://downloads.apache.org/jackrabbit/