簡體   English   中英

KeyCloak WildFly 獨立模塊 MySQL

[英]KeyCloak WildFly Standlone module MySQL

我正在嘗試以standalone模式部署 WildFly KeyCloak 服務器。 當我什么都不做但現在我想添加MySQLDatasource時,這很好用。
因此我必須添加一個我正在使用的驅動程序: mysql-connector-java-8.0.20.jar
要添加驅動程序,我將其放在/modules/com/mysql/main/中。 然后我添加一個module.xml文件:

<module xmlns="urn:jboss:module:1.1" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-8.0.20.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api">
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

然后我在standalone.xml中添加以下內容:

<driver name="mysql" module="com.mysql">
     <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
</driver>

然后,當我使用standalone.bat部署服務器時,出現以下錯誤:

16:57:43,962 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 32) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "mysql")
]) - failure description: "WFLYJCA0041: Failed to load module for driver [com.mysql]"

干杯!!

簡化您的生活,以便下次您執行此操作時無需手動操作。 創建一個包含以下內容的文件:

embed-server --server-config=standalone.xml --std-out=echo
    
batch

#
# remove the default provided datasource
#
/subsystem=datasources/data-source=KeycloakDS/:remove

#
# add the module
#
module add --name=com.mysql --resources=${user.home}/Downloads/mysql-connector-java-8.0.20/mysql-connector-java-8.0.20.jar --dependencies=javax.api,javax.transaction.api

#
# create the driver
#
/subsystem=datasources/jdbc-driver=mysql:add(driver-name="mysql",driver-module-name="com.mysql",driver-class-name=com.mysql.cj.jdbc.MysqlXADataSource)

#
# create the datasource
#
/subsystem=datasources/data-source=KeycloakDS/:add(connection-url=jdbc:mysql://localhost:3306/keycloak,driver-name=mysql,jndi-name=java:jboss/datasources/KeycloakDS,initial-pool-size=4,max-pool-size=64,min-pool-size=4,password=keycloak,user-name=keycloak)

run-batch

使用$KEYCLOAK_HOME/bin/jboss-cli.sh --file=<the_file_name>運行它。 運行此腳本時無法運行 Keyclock。 並且在重新啟動 Keycloak 之前,用戶和數據庫必須已經存在。

這是做什么的

  1. 刪除“舊”Keycloak 數據源
  2. 安裝模塊。 在上面的代碼中,您需要更新 MySQL 驅動程序的位置。
  3. 使用正確的參數重新安裝 Keycloak 數據源。

優點是如果您需要再次安裝或安裝到不同的服務器中,這是可以重復的。

你需要 XA 驅動程序嗎? 如果我自己在 Wildfly 中進行開發,我可能需要 XA,但我認為 Keycloak 不會利用它。

嘗試這個:

將連接器放在 /standalone/deployments 中,然后再次啟動服務器。 它將在系統中部署和注冊連接器。

接下來將其添加到您的standalone.xml 數據源中。

<datasource jndi-name="java:/jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true">
                  <connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&amp;characterEncoding=UTF-8&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=Africa/Luanda</connection-url>
                  <driver>mysql</driver>
                  <pool>
                      <min-pool-size>5</min-pool-size>
                      <max-pool-size>15</max-pool-size>
                  </pool>
                  <security>
                      <user-name>usernameforthedb</user-name>
                      <password>password</password>
                  </security>
                  <validation>
                      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                      <validate-on-match>true</validate-on-match>
                      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
                  </validation>
              </datasource> 

相應地更改您的 serverTimezone。 並且,為了安全起見,請在啟動服務器之前將數據庫添加到 mysql 中。

重新啟動。

PS當然保留這個:

<driver name="mysql" module="com.mysql">
     <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
</driver>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM