在 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 ?