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>
- Copy ojdbc6.jar to main folder ( I use 11.2.0.4 version). You can download ojdbc.jar with below url.
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.