Bluemix Liberty server.xml MySQL 数据源配置

Bluemix Liberty server.xml MySQL data source configuration

我有一个基于 EJB 的应用程序连接到 MySQL 数据库并提供 Web UI 用于更新操作。部署到本地 WAS Liberty 时工作正常。

这里是数据源的server.xml配置。

<library id="MySQLDriverLib">
    <file name="${User-defined_JDBC_DRIVER_PATH}/mysql-connector-java-5.1.38-bin.jar"/>
</library>
<dataSource id="DefaultDataSource" type="javax.sql.ConnectionPoolDataSource" transactional="true">
    <jdbcDriver libraryRef="MySQLDriverLib"/>
    <properties URL="jdbc:mysql://localhost:3306/ic16_lab2434" connectionUrl="jdbc:mysql://localhost:3306/ic16_lab2434" driver="com.mysql.jdbc.Driver" driverClass="com.mysql.jdbc.Driver" metadata="mySQL" password="object00" user="root" userName="root" />
</dataSource>
<variable name="User-defined_JDBC_DRIVER_PATH" value="C:\Software\mysql-connector-java-5.1.38"/>

如您所见,它使用 JDBC 驱动程序 jar 的库,该库由文件路径指定。显然,如果我尝试仅将 EAR 部署到 Bluemix Liberty,这将不起作用。这就是我部署整个服务器目录以进行最少更改的原因。然而,即使在这种情况下,我也不知道如何为数据源正确配置 JDBC 驱动程序库,以便服务器获取它。请帮忙。

如果您想连接到 mysql 数据库并想 手动 在 server.xml 中提供凭据,您可以执行以下操作:

server.xml:

<dataSource jndiName="jdbc/TradeDataSource">
    <jdbcDriver id="mysqlDriver" libraryRef="mysql-connector" />
    <properties
        URL="jdbc:mysql://1.2.3.4:3306/db"
        password="mypassword" user="admin" />
</dataSource>
<library description="MySQL JDBC Driver" id="mysql-connector"
    name="MySQL Connector">
    <fileset dir="${server.config.dir}" id="mysql-connector-jar"
        includes="mysql-connector-java-*.jar" />
</library>

在这个例子中,我会将 mysql jar 文件放在服务器配置目录 wlp/usr/servers/defaultServer/mysql-connector-java-5.1.34-bin.jar

您现在可以 cf push 直接从默认服务器目录

但是,liberty buildpack 可以自动 为您从 Bluemix 目录绑定的数据库生成 server.xml 数据源配置。例如,如果我创建一个 SQLDB 或 ClearDB 服务并将其绑定到我的 Liberty 应用程序并将该服务命名为 "TradeDataSource",buildpack 将生成配置并自动将正确的驱动程序 jar 添加到类路径中。

cf files yourappname app/wlp/usr/servers/defaultServer/server.xml

<dataSource id='mysql-TradeDataSource' jdbcDriverRef='mysql-driver' jndiName='jdbc/TradeDataSource' transactional='true' type='javax.sql.ConnectionPoolDataSource'>
    <properties id='mysql-TradeDataSource-props' databaseName='${cloud.services.TradeDataSource.connection.name}' user='${cloud.services.TradeDataSource.connection.user}' password='${cloud.services.TradeDataSource.connection.password}' portNumber='${cloud.services.TradeDataSource.connection.port}' serverName='${cloud.services.TradeDataSource.connection.host}'/>
    <connectionManager id='mysql-TradeDataSource-conMgr' maxPoolSize='10'/>
</dataSource>
<jdbcDriver id='mysql-driver' javax.sql.XADataSource='org.mariadb.jdbc.MySQLDataSource' javax.sql.ConnectionPoolDataSource='org.mariadb.jdbc.MySQLDataSource' libraryRef='mysql-library'/>

我现在可以使用其 jndi 名称查找数据源:jdbc/TradeDataSource