在 GeoServer 自带的 Jetty 中使用 JNDI 连接数据库
添加 JNDI 支持
下载与 GeoServer 中的 Jetty 版本一致的完整包, 以最近发布的 GeoServer 2.20.0 为例, 内置的 Jetty 为 9.4.36.v20210114 。 添加 JNDI 支持需要 jndi 和 plus 两个模块, 添加步骤为:
-
复制
~/jetty/modules/jndi.mod文件到~/geoserver/modules目录, 并将depend节点中的mail注释掉, 因为不需要mail模块, 当然如果需要mail模块, 也可以将mail相关的模块也添加进来; -
复制
~/jetty/modules/plus.mod文件到~/geoserver/modules目录, 并将depend节点中的transactions注释掉, 因为不需要transactions模块, 如果需要transactions模块, 也可以将transactions相关模块也添加进来; -
复制
~/jetty/lib/jetty-jndi-9.4.36.v20210114.jar、~/geoserver/lib/jetty-plus-9.4.36.v20210114.jar到~/geoserver/lib/目录; -
修改
~/geoserver/start.ini文件,在文件末尾添加--module=jndi和--module=plus -
运行
~/geoserver/bin/startup.sh, 启动 GeoServer , 观察控制台是否有错误信息输出:-
如果有任何错误输出, 则检查前面的步骤是否有遗漏;
-
如果能够正常启动, 则可以进行下一步设置;
-
配置 JNDI 数据源
-
新建
~/geoserver/webapps/geoserver/WEB-INF/jetty-env.xml文件, 配置一个 JNDI 资源, 名称为jdbc/geo_test, 文件内容如下:<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="jdbc/geo_test" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>Arg>
<Arg>jdbc/geo_testArg>
<Arg>
<New class="org.postgresql.ds.PGSimpleDataSource">
<Set name="url">jdbc:postgresql://127.0.0.1:54321/geo_test?ApplicationName=geoserver&useSSL=trueSet>
<Set name="user">postgresSet>
<Set name="password">YOUR_PASSWORDSet>
New>
Arg>
New>
Configure> -
重启 GeoServer 之后, 登录到 GeoServer , 选择新建矢量数据源 PostGIS (JNDI) , 在新建页面的
jndiReferenceName *中输入上面jetty-env.xml文件中的定义的 JNDI 资源名称jdbc/geo_test即可; -
保存之后, 发布图层就是常规操作了。
为什么要使用 JNDI ?