12.4.2. 配置外部数据源
要使用外部数据源,您可以定义自定义镜像模板,然后使用 Source-to-Image(S2I)构建工具来创建镜像。S2I 是一个框架,将应用程序源代码用作输入,并生成一个运行编译的应用程序的新镜像作为输出。
以下高级别步骤提供进程概述:
指定镜像模板 JSON 中的
CUSTOM_INSTALL_DIRECTORIES
环境变量。此变量定义 S2I 工件所在的位置,如下例所示:{ "name": "CUSTOM_INSTALL_DIRECTORIES", "value": "extensions/*" }
在该目录中创建一个
install.sh
脚本。此脚本为镜像中外部数据源安装模块和驱动程序。以下是
install.sh
脚本示例:#!/bin/bash # Import the common functions for # installing modules and configuring drivers source /usr/local/s2i/install-common.sh # Directory where this script is located injected_dir=$1 # Install the modules for the datasource install_modules ${injected_dir}/modules # Configure the drivers for the datasource configure_drivers ${injected_dir}/drivers.properties
包括一个
模块
子目录,其中包含module.xml
文件和数据源的驱动程序。生成的镜像使用模块来加载类并定义依赖项。例如,您计划将 Derby 用作外部数据源。您需要获取一个驱动,如
derby-10.12.1.1.jar
,并将其放置在以下目录中:modules/org/apache/derby/main/
在同一目录中,您还需要创建一个
module.xml
文件,该文件将驱动程序定义为资源并声明依赖项。以下是
module.xml
文件示例:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="org.apache.derby"> <resources> <resource-root path="derby-10.12.1.1.jar"/> <resource-root path="derbyclient-10.12.1.1.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
在 driver
.property 环境变量文件中定义驱动程序
配置属性。以下是
驱动程序.property 文件示例
:#DRIVERS DRIVERS=DERBY DERBY_DRIVER_NAME=derby DERBY_DRIVER_MODULE=org.apache.derby DERBY_DRIVER_CLASS=org.apache.derby.jdbc.EmbeddedDriver DERBY_XA_DATASOURCE_CLASS=org.apache.derby.jdbc.EmbeddedXADataSource
在构建和部署镜像后,为数据源指定环境变量。
以下示例显示了带有
DATASOURCES
环境变量的数据源定义:# Set a unique prefix for the datasource DATASOURCES=ACCOUNTS_DERBY # Specify other environment variables using the prefix ACCOUNTS_DERBY_DATABASE=accounts ACCOUNTS_DERBY_JNDI=java:/accounts-ds ACCOUNTS_DERBY_DRIVER=derby ACCOUNTS_DERBY_JTA=true ACCOUNTS_DERBY_NONXA=false ACCOUNTS_DERBY_USERNAME=${USERNAME} ACCOUNTS_DERBY_PASSWORD=${PASSWORD} ACCOUNTS_DERBY_XA_CONNECTION_PROPERTY_DatabaseName=/opt/eap/standalone/data/databases/derby/accounts # _HOST and _PORT are required but not used ACCOUNTS_ORACLE_HOST=dummy ACCOUNTS_ORACLE_PORT=1527