1. 程式人生 > >Keycloak切換外部資料庫

Keycloak切換外部資料庫

Keycloak預設使用嵌入式關係資料庫H2,真實生產環境肯定是不符合要求的,在其官方文件中有這麼一段話

We highly recommend that you replace it with a more production ready external database. The H2 database is not very viable in high concurrency situations and should not be used in a cluster either.

可見其官方也是推薦使用外部資料庫作為生產環境。
以mysql為例,切換資料庫大體分為五步:
1、下載對應的JDBC驅動
2、將驅動打包安裝到Keycloak中
3、配置檔案中宣告使用的JDBC驅動
4、修改資料來源設定以使用新的JDBC驅動
5、修改資料庫連線引數(可選)


1.下載JDBC驅動,可從官網或maven倉庫直接下載,不再贅述。
2.將驅動打包放入Keycloak的classpath中
2.1在路徑keycloak-4.1.0.Final\modules\system\layers\keycloak下新建目錄com\mysql\main,並將下載的Jar放入此目錄。目錄名稱可隨意修改,不過官方推薦使用包路徑作為目錄。

The convention is use the Java package name of the JDBC driver for the name of the directory structure. For PostgreSQL, create the directory org/postgresql/main.

2.2 jar同級目錄下新建檔案module.xml,檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-8.0.11.jar"/>
    </resources>
    <dependencies>
        <module
name="javax.api"/>
<module name="javax.transaction.api"/> </dependencies> </module>

其中name應為包名,後文配置資料來源過程中會用到此name。dependencies包含可能會用到的依賴項。
3.編輯standalone.xml,位置在keycloak-4.1.0.Final\standalone\configuration。若為叢集模式編輯standalone-ha.xml。尋找drivers標籤,預設有一個h2資料庫的配置,我們要在同級增加一個mysql的配置,內容如下:

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

module即為之前module.xml中定義的name,此處的name為driver的名稱,在接下來的資料來源配置中會使用到。
此處注意,xa-datasource-class的路徑可能會隨著JDBC版本變化而變化,可從jar包中尋找到正確的路徑。
4.向上尋找datasources標籤,預設此處有兩項datasource,我們註釋掉名稱為KeycloakDS的資料來源,並加上mysql的。注意不要把ExampleDS也註釋掉,啟動會報錯的。新增內容如下:

<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/keycloak</connection-url>
    <driver>mysql</driver>
    <pool>
        <max-pool-size>20</max-pool-size>
    </pool>
    <security>
        <user-name>root</user-name>
        <password>123456</password>
    </security>
</datasource>

driver處對應上面定義driver標籤中的name。其餘專案見文知意,根據具體專案修改即可,此處需要手工建立keycloak庫。
5.尋找name為connectionsJpa的spi標籤,此標籤內可定義諸多資料來源選項,例如showsql,formatsql等等,可根據需要修改。支援的配置項詳見官方文件。


配置完成,啟動對應的bat或shell檔案,通過資料庫工具可以看到自動新建了93張表。
這裡寫圖片描述