首页 文章

Bluemix Liberty server.xml MySQL数据源配置

提问于
浏览
0

我有一个基于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的库,该驱动程序jar使用path to file指定 . 显然,如果我尝试将EAR部署到Bluemix Liberty,这将无效 . 这就是我部署整个服务器目录以进行最少数量更改的原因 . 即使在这种情况下,我也不知道如何为数据源正确配置JDBC驱动程序库,以便服务器选择它 . 请帮忙 .

1 回答

  • 1

    如果要连接到mysql数据库并希望 manually 在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

    您现在可以直接从defaultServer目录 cf push

    但是,自由buildpack可以 automatically 为从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

相关问题