如何在 Payara Micro 中添加 JDBC 驱动程序并配置 JDBC 资源?

How do I add JDBC drivers and configure JDBC Resources in Payara Micro?

使用 Java EE Payara Micro 时,设置 JDBC 驱动程序和资源的选项有哪些?

您可以在正常 domain.xml 中配置 JDBC 并将其提供给 Payara。如果您不确定,您可以随时使用现有的 domain.xml 并使用其中的 JDBC 配置。

Payara Micro has a few command line options,其中一个允许您指定替代 domain.xml 文件:

java -jar payara-micro.jar --deploy myApp.war --domainConfig mydomain.xml

如果您以编程方式引导 Payara Micro,您将使用:

setAlternateDomainXML(File alternateDomainXML)

Adam Bien 在他的 19th Airhacks video.

中回答了这个问题

我的看法,当与自定义资源一起使用时,最好用作嵌入式服务器,主要是我们配置 JDBC 资源和 Maven 依赖项,我们将所需的驱动程序包含在 jar 或 war 个文件。

将数据源定义添加到您的 web.xml,然后将 JDBC jar 的 jar 文件添加到您的 WEB-INF/lib。然后像往常一样将 war 文件部署到 Payara Micro。

<data-source>
  <name>java:global/ExampleDataSource</name>
  <class-name>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</class-name>
  <server-name>localhost</server-name>
  <port-number>3306</port-number>
  <database-name>mysql</database-name>
  <user>root</user>
  <password>root</password>
  <!-- Example of how to use a Payara specific custom connection pool    setting -->
  <property>
     <name>fish.payara.sql-trace-listeners</name>
     <value>com.sun.gjc.util.SQLTraceLogger</value>
  </property>
</data-source>

在 Payara 示例 GitHub 存储库中有一个完整的示例说明如何执行此操作。参见 Datasource example on Payara GitHub

此方法通过 tainos 结合了 Mike 和 Adam Bien 的答案。它涉及制作一个新的 domain.xml,这是一个 Payara 配置文件。如果它与完整的 Payara 一起工作,则不需要修改应用程序。以下示例适用于 PostgreSQL JDBC.

  1. 用存档管理器打开 payara-micro.jar 并提取文件 /microdomain.xml
  2. 在文本编辑器中打开 microdomain.xml
  3. 如果您的应用程序已经部署到完整的 Payara,您可以从完整的 Payara domain.xml.
  4. 复制粘贴以下更改
  5. 在包含 </resources> 的行上方添加,使用您的数据库名称、数据库用户、数据库密码、hostname:port 和池名称:

    <jdbc-connection-pool connection-validation-method="auto-commit" driver-classname="org.postgresql.Driver" res-type="java.sql.Driver" name="poolname" is-connection-validation-required="true" connection-creation-retry-attempts="3" validate-atmost-once-period-in-seconds="60">
        <property name="URL" value="jdbc:postgresql://localhost:5432/dbname"></property>
        <property name="user" value="dbuser"></property>
        <property name="password" value="dbpassword"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="poolname" jndi-name="jdbc/poolname"></jdbc-resource>
    
  6. 在包含 </server>:

    的行上方添加
    <resource-ref ref="jdbc/poolname"></resource-ref>
    
  7. 保存并关闭文本编辑器。
  8. 使用您的路径和文件名从命令行启动 Payara micro。 Linux语法:

    java -cp "/opt/jdbc/postgresql.jar:/opt/payara/micro.jar" fish.payara.micro.PayaraMicro --deploy webapp.war --domainConfig microdomain.xml
    

其中一个选项是 glassfish-resources.xml

<!-- db1 -->
<jdbc-connection-pool
        datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="db1"
        res-type="javax.sql.DataSource"
        steady-pool-size="1"
        is-connection-validation-required="true"
        connection-validation-method="meta-data"
        max-pool-size="10">
    <property name="password" value="icoder_pwd"/>
    <property name="user" value="icoder_user"/>
    <property name="databaseName" value="icoder_db"/>
    <property name="serverName" value="localhost"/>
    <property name="portNumber" value="3310"/>
    <property name="zeroDateTimeBehavior" value="convertToNull"/>
</jdbc-connection-pool>
<jdbc-resource pool-name="db1" jndi-name="jdbc/db1"/>


<!-- db2 -->
<jdbc-connection-pool
        datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="db2"
        res-type="javax.sql.DataSource"
        steady-pool-size="1"
        is-connection-validation-required="true"
        connection-validation-method="meta-data"
        max-pool-size="10">
    <property name="password" value="icoder_pwd"/>
    <property name="user" value="icoder_user"/>
    <property name="databaseName" value="icoder_db"/>
    <property name="serverName" value="localhost"/>
    <property name="portNumber" value="3311"/>
    <property name="zeroDateTimeBehavior" value="convertToNull"/>
</jdbc-connection-pool>
<jdbc-resource pool-name="db2" jndi-name="jdbc/db2"/>


</resources>

您可以找到包含实体管理器实现的完整示例: https://github.com/igorzg/payara-micro-jpa-multi-tenancy

由于 对我不起作用,所以我想出了一种不同且稍微简单的方法。你还是依赖自定义的domain.xml,但是启动命令可以简化:

java -jar /opt/payara/payara-micro.jar --deploy webapp.war --domainConfig domain.xml --addJars /opt/mysql-connector-java-5.1.40-bin.jar

这个调用不需要你知道 Main class。