iOS Developer的全棧之路 - Keycloak(10)

這一節(jié)中,我們來看看如何為Keycloak配置數(shù)據(jù)庫。默認(rèn)情況下,Keycloak使用的是輕量級(jí)的內(nèi)嵌數(shù)據(jù)庫H2,作為學(xué)習(xí)是足夠的,但在生成環(huán)境下還需為其配置功能更強(qiáng)大的關(guān)系型數(shù)據(jù)庫。

Keycloak數(shù)據(jù)持久化使用了兩層結(jié)構(gòu),底層為JDBC用于連接具體的數(shù)據(jù)庫,上層為Hibernate JPA,用于實(shí)現(xiàn)ORM。在本節(jié)中,我們將使用Posgres作為示例進(jìn)行演示,配置如下:

  1. Keycloak 8.0.1
  2. Docker (用于運(yùn)行數(shù)據(jù)庫實(shí)例)
  3. Postgres 9.6.17
  4. JDBC driver postgresql-42.2.11

使用Docker運(yùn)行本地?cái)?shù)據(jù)庫

使用了官方的鏡像postgres:9.6.17,運(yùn)行如下命令
docker run -p 5432:5432 --name my-postgres -e POSTGRES_PASSWORD=123456 -e POSTGRES_USER=root -e POSTGRES_DB=keycloak -d postgres:9.6.17
其中通過-e來指定了用戶名和密碼,同時(shí)配置了初始的數(shù)據(jù)庫keycloak。運(yùn)行后,可使用Navcat來查看數(shù)據(jù)庫是否正常運(yùn)行。

配置JDBC driver

地址為:https://jdbc.postgresql.org/download.html在這里給出了不同的driver版本,官方建議沒有特殊需求可直接使用最新的版本,此時(shí)最新的為42.2.11。同時(shí)還需要注意JDBC 4.x的版本需要,由于Keycloak使用的是Java 8,所以可以采用JDBC 4.2。

下載后需要把該jar包放在指定的位置,路徑為:keycloak-8.0.1/modules/system/layers/keycloak/org/postgresql/main/postgresql-42.2.11.jar,此時(shí)會(huì)發(fā)現(xiàn)在org下并沒有postgresql目錄,手動(dòng)創(chuàng)建即可。同時(shí)還需要為其添加配置文件,目的是讓wildfly可以讀取到該JDBC driver,配置文件和jar包在同一目錄下即可:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">

    <resources>
        <resource-root path="postgresql-42.2.11.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

由于在同級(jí)目錄下,resource-root path直接賦值為當(dāng)前的jar文件名。

配置DataSource

為了讓Keycloak啟動(dòng)后可以直接使用到我們外置的數(shù)據(jù)庫,需要將原先使用H2的配置,更改為Postgres。根據(jù)不同的部署方式,需要更改不同的配置文件,對(duì)于單體應(yīng)用而言,需要修改standalone/configuration/standalone.xml,而對(duì)于集群部署,則需要修改standalone/configuration/standalone-ha.xml。在配置文件中,可根據(jù)關(guān)鍵詞datasource進(jìn)行搜索

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
            <driver>h2</driver>
            <security>
                <user-name>sa</user-name>
                <password>sa</password>
            </security>
        </datasource>
        <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
            <connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
            <driver>postgresql</driver>
            <pool>
                <max-pool-size>20</max-pool-size>
            </pool>
            <security>
                <user-name>root</user-name>
                <password>123456</password>
            </security>
        </datasource>
        <drivers>
            <driver name="postgresql" module="org.postgresql">
                <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
            </driver>
            <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>

在drivers這個(gè)tag下,原先只有h2,此時(shí)我們添加了postgresql。同時(shí)在上方的datasource中,將KeycloakDS下的配置也需要修改為postgresql。這里的配置無需過多說明,比較容易理解。

此外還有關(guān)于數(shù)據(jù)庫的一些配置,如初始化方式,migration策略等,可以保持默認(rèn)即可:

<spi name="connectionsJpa">
    <provider name="default" enabled="true">
        <properties>
            <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
            <property name="initializeEmpty" value="true"/>
            <property name="migrationStrategy" value="update"/>
            <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
        </properties>
    </provider>
</spi>

initializeEmpty:當(dāng)數(shù)據(jù)庫為空時(shí),是否自動(dòng)進(jìn)行初始化,若設(shè)置為false,則需要手動(dòng)進(jìn)行初始化。
migrationStrategy:migration策略,可選的有update, manual 和 validate。

檢驗(yàn)

配置完成后,運(yùn)行./standalone.sh即可運(yùn)行,通過Navcat可以查看到Keycloak默認(rèn)創(chuàng)建的表:

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Druid的簡介 Druid首先是一個(gè)數(shù)據(jù)庫連接池。Druid是目前最好的數(shù)據(jù)庫連接池,在功能、性能、擴(kuò)展性方面,...
    _雙眸閱讀 1,916評(píng)論 0 5
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,280評(píng)論 0 4
  • 在我們試圖將Keycloak引入一個(gè)已用項(xiàng)目時(shí),通常項(xiàng)目已有用戶系統(tǒng),如果要進(jìn)行完整的用戶系統(tǒng)遷移,migrate...
    西西的一天閱讀 1,427評(píng)論 0 1
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,031評(píng)論 0 11
  • 冰壺感悟:1懂了之后,才有可能產(chǎn)生興趣。以前覺得冰壺太無聊了,其實(shí)是因?yàn)樽约翰欢?。光懂?guī)則也不行,自己參與進(jìn)來,自...
    李少鋒閱讀 842評(píng)論 0 0

友情鏈接更多精彩內(nèi)容