keycloak在书写User Storage Provider的时候,若登录数据分散到不同的应用数据库中,采用User Storage Provider实现的时候,需要对不同的Deployment使用不同的数据,考虑到多个数据库操作的事物问题,则必须使用Xa-Datasource。下问对keycloak的standalone.xml的配置文件做以下记录,有需要者可参考。
1 <subsystem xmlns="urn:jboss:domain:datasources:5.0"> 2 <datasources> 3 <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> 4 <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> 5 <driver>h2</driver> 6 <security> 7 <user-name>sa</user-name> 8 <password>sa</password> 9 </security> 10 </datasource> 11 <xa-datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"> 12 <xa-datasource-property name="ServerName">localhost</xa-datasource-property> 13 <xa-datasource-property name="DatabaseName">keycloak-dev</xa-datasource-property> 14 <driver>mysql</driver> 15 <security> 16 <user-name>root</user-name> 17 </security> 18 </xa-datasource> 19 <xa-datasource jndi-name="java:jboss/datasources/KeycloakExtendSP" pool-name="KeycloakExtendSP" enabled="true" use-java-context="true"> 20 <xa-datasource-property name="ServerName">localhost</xa-datasource-property> 21 <xa-datasource-property name="DatabaseName">storage-provider-database</xa-datasource-property> 22 <driver>mysql</driver> 23 <security> 24 <user-name>root</user-name> 25 </security> 26 </xa-datasource> 27 <drivers> 28 <driver name="mysql" module="org.mysql"> 29 <xa-datasource-class>org.mariadb.jdbc.MariaDbDataSource</xa-datasource-class> 30 </driver> 31 <driver name="h2" module="com.h2database.h2"> 32 <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 33 </driver> 34 </drivers> 35 </datasources> 36 </subsystem>
做此记录,若要探讨关于keycloak-storage-provider的相关问题,欢迎留言。
参考链接
https://access.redhat.com/documentation/en-us/jboss_enterprise_application_platform/6/html/administration_and_configuration_guide/example_mysql_xa_datasource1