配置数据库

引言

GeoNetwork使用数据库来持久保存元数据记录、权限和配置等方面。数据库默认结构由应用程序在初次启动时创建。GeoNetwork的后续版本将自动更新数据库结构。因此,数据库用户最初需要数据库上的CREATE权限。支持多种数据库方言; H2PostgreSQLPostGISOracleSQL Server 。本节介绍配置数据库连接的各种选项。

H2数据库

默认情况下,一个 H2 数据库是在应用程序首次启动时配置和创建的。名为的H2数据库 gn.h2.db 已创建:

  • jetty 使用时,GeoNetwork应用程序文件夹的文件夹 ZIP distribution

  • bin 在部署时使用Tomcat文件夹 WAR 在Tomcat上(开始使用 startup.sh )。

注解

你不会的 need 如果您对本地H2数据库满意,可以配置数据库。仅当您希望将数据存储在远程数据库上时才更改配置。

通过配置文件配置数据库

数据库方言在中配置 /WEB-INF/config-node/srv.xml 。取消对要使用的方言的注释。

包含用于PostgreSQL、Oracle和H2的JDBC驱动程序。其他方言需要安装JDBC驱动程序。下载该方言的JDBC库并将其放入 /WEB-INF/lib 或在Tomcat或GeoNetwork lib文件夹中。

要更新连接详细信息,请使用相关连接信息更新|jdbc.properties|文件。

GeoNetwork假定数据存储在用户的默认架构中。如果不是这样,您需要激活一个设置 hibernate.default_schema 在……里面 /WEB-INF/config-spring-geonetwork.xml 。有些脚本在初始化时直接在数据库上运行,不能使用 hibernate.default-schema 参数。对于这些脚本,您需要手动设置默认模式。在PostgreSQL中,这可以通过将 ?currentSchema=example 连接到数据库连接。

通过JNDI配置数据库

Java命名和目录接口(Java Naming and Directory Interface,JNDI)是一种允许在Tomcat中配置数据库并按名称引用JNDI连接的技术。

  1. 要激活JNDI,需要在中激活JNDI数据库类型 /WEB-INF/config-node/srv.xml

  2. 在Tomcat中配置JNDI连接,方法是将新资源添加到 TOMCAT/conf/context.xml 。在香港的码头 WEB-INF/jetty-env.xml

    <Resource name="geonetwork"
        type="javax.sql.DataSource"
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/geonetwork"
        username="xxxxx" password="xxxxxx"
        maxActive="20"
        />
    

通过环境配置数据库

通过环境变量设置配置属性在Docker等容器环境中很常见。存在2个选项:

  1. 通过替换JAVA_OPTS将参数直接添加到Java环境。

    docker run --rm --name gn -p 8080:8080 -e JAVA_OPTS="
        -Dgeonetwork.db.type=postgres
        -Djdbc.database=example
        -Djdbc.username=example
        -Djdbc.password=xxx
        -Djdbc.host=localhost
        -Djdbc.port=5432" geonetwork:latest
    
  2. 设置准确的环境变量,包括“.”。许多GeoNetwork配置参数都包含一个点,这对于通过环境变量进行替换是一个挑战。Docker在这里是个例外,它提供了一种允许在环境变量中使用圆点的机制。

    docker run --rm --name gn -p 8080:8080
        -e geonetwork.db.type=postgres
        -e jdbc.database=example
        -e jdbc.username=example
        -e jdbc.password=xxx
        -e jdbc.host=localhost
        -e jdbc.port=5432 geonetwork:latest
    

在PostgreSQL中,可以配置 postgrespostgis 。在后一种情况下,GeoNetwork将使用PostGIS的空间功能来转换过滤元数据。在第一种情况下(对于其他数据库方言),创建一个shapefile来存储元数据复盖率。

日志记录

要查看有关数据库连接和查询的更多详细信息,可以在中将日志切换到调试级别 source file web/src/main/webapp/WEB-INF/classes/log4j.xml (或参见 目录服务器 >日志级别)。

<logger name="org.hibernate.SQL" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="consoleAppender" />
    <appender-ref ref="fileAppender" />
</logger>
<logger name="org.hibernate.type" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="consoleAppender" />
    <appender-ref ref="fileAppender" />
</logger>
<logger name="org.hibernate.tool.hbm2ddl" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="consoleAppender" />
    <appender-ref ref="fileAppender" />
</logger>

摘要

在GeoNetwork中配置数据库有多种方法。JNDI和环境是有利的,因为在更新到新版本或更改数据库时,您不需要接触任何应用程序文件。