Apache Jackrabbit 配置参数详解

详解 Apache Jackrabbit 2.22.5 的核心配置:repository.xml 各节点(DataStore/Security/Persistence/Versioning/SearchIndex/Cluster)、standalone 启动参数、web.xml servlet 映射、日志配置与 JVM 堆参数,含生产配置模板。

Apache JackrabbitApache Jackrabbit参数调优数据库Apache配置详解2026/10/11

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.xmlunzip -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 根目录与默认 workspacerootPath=${rep.home}/workspaces、defaultWorkspace=default
<Workspace>workspace 模板(file system / persistence / search index)LocalFileSystem + BundleFsPersistenceManager(本环境)+ SearchIndex
<Versioning>版本管理存储LocalFileSystem + BundleFsPersistenceManager
<SearchIndex>仓库级全文索引(jcr:system 树、版本)lucene.SearchIndex
<Cluster>集群 journalMemoryJournal(单机默认)

4.3 Servlet 端点映射(web.xml 实测)

ServletURL 模式用途
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存放用户/权限的安全 workspacesecurity
LoginModule/@anonymousId匿名用户 IDanonymous
LoginModule/@adminId管理员用户 ID(默认密码 admin,首次登录后可改)admin

💡 实测默认管理员为 admin / admin;本系列环境已通过 JCR UserManager.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/@rootPathworkspace 目录根${rep.home}/workspaces
Workspaces/@defaultWorkspace默认 workspace 名default
Workspace/@name模板占位(按 workspace 名实例化)${wsp.name}
FileSystem/@pathworkspace 文件系统目录${wsp.home}
PersistenceManager/@class节点/属性持久化实现默认 DerbyPersistenceManager;本环境 BundleFsPersistenceManager
PersistenceManager/urlDerby 的 JDBC URL(用文件持久化时删除)jdbc:derby:${wsp.home}/db;create=true
SearchIndex/@pathLucene 索引目录${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(共享文件系统),否则节点间不同步。

八、参考链接