How to setup Keycloak 6 with Oracle Database

Keycloak comes with H2 database for quick prototyping and simplification to bootstrap. But in production, you may want to change it to a more mature database like Oracle, MySQL, PostgreSQL etc.

To do that, there are 2 simple steps you need to follow

1) Add Oracle Oracle JDBC Thin driver

  • Go to modules folder and create below path
    • modules\system\layers\keycloak\com\oracle\ojdbc6\main
  • Create a module.xml at main folder with below content

<?xml version=”1.0″ ?>
<module xmlns=”urn:jboss:module:1.3″ name=”com.oracle.ojdbc6″>
<resources>
<resource-root path=”ojdbc6″/>
</resources>
<dependencies>
<module name=”javax.api”/>
<module name=”javax.transaction.api”/>
</dependencies>
</module>

2) Change Keycloak Config

  • Change subsystem node in standalone.xml at /standalone/configuration/standalone.xml
  • Change your ip-port, schema, username,password credentials
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:oracle:thin:@IP:PORT/schema</connection-url>
                    <driver>oracle</driver>
                    <security>
                        <user-name>username</user-name>
                        <password>password</password>
                    </security>
                    <validation>
                        <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
                        <background-validation>true</background-validation>
                        <background-validation-millis>60000</background-validation-millis>
                    </validation>
                    <pool>
                        <flush-strategy>IdleConnections</flush-strategy>
                    </pool>
                </datasource>
                <drivers>
                    <driver name="oracle" module="com.oracle.ojdbc6">
                        <driver-class>oracle.jdbc.OracleDriver</driver-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

Change ExampleDS to KeycloakDS

<subsystem xmlns="urn:jboss:domain:ee:4.0">
...
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/KeycloakDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
</subsystem>

Restart your application.

Leave a comment