由於我是已經安裝和配置好了keycloak,所以我這里說的只是將keycloak 的自帶數據庫改為mysql。前期的安裝keycloak可以參考其他博客。
環境
https://www.keycloak.org/docs/latest/server_installation/index.html
CentOS Linux release 7.5.1804 (Core)
keycloak-8.0.2
開始
主要參照這三個博客的步驟:
https://blog.csdn.net/zhuwei_clark/article/details/84260071
https://blog.csdn.net/qq_16116549/article/details/110069913
https://blog.csdn.net/qq_30038111/article/details/83659254
下載包,解壓,改配置文件。
我剛開始沒想着連外部mysql,所以除了mysql那些都做好了,直接啟動。正常。
如果除開連外部mysql這個過程倒也簡單。
但是現在研發同學告訴我要用自己的數據測試,而且keycloak官方也表示h2的庫不穩定,不建議用。
所以也得改為mysql。
首先是下載連接mysql的驅動,是個jar包。下載地址:https://dev.mysql.com/downloads/
下載后放到:keycloak/modules/system/layers/base/com/mysql/main/
並且!!!這是其他三個博客都沒說到的,touch module.xml 把這個module.xml 也放在 keycloak/modules/system/layers/base/com/mysql/main/
接下來,其他博客說:修改jndi-name="java:jboss/datasources/KeycloakDS
這節的xml ,把h2 的這個設置直接修改為mysql的
我這么做了。
但后來發現官方的操作是 新增mysql drive的配置,保留h2 那段:
<drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class> </driver> </drivers>
然后找到KeycloakDS 這段,改為自己的連接信息:
<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:mysql://10.206.230.218:3306/keycloak?useSSL=false</connection-url> <driver>mysql</driver> <security> <user-name>keycloak</user-name> <password>password</password> </security> </datasource>
然后我就啟動了。
結果報錯。 忘記截圖了,大概是說
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 這個類找不到。
試了好多次都不行:
最后問了下研發同學,果然還是他們有經驗。
原因是這個類的名字跟你服務器的路徑對不上,所以找不到類。
畢竟網上那么多人,每個文件的路徑不可能一致。所以應該這樣:
找到剛剛的驅動jar包,解壓,找到
MysqlXADataSource 這個文件
[appdeploy@1a41vla0941zzzz mysql-connector-java-8.0.25]$ find . -name MysqlXADataSource* ./src/main/user-impl/java/com/mysql/cj/jdbc/MysqlXADataSource.java ./com/mysql/cj/jdbc/MysqlXADataSource.class [appdeploy@1a41vla0941zzzz mysql-connector-java-8.0.25]$
發現路徑在cj下面,那么類名應該拼接為:
com.mysql.cj.jdbc.MysqlXADataSource
再次重啟。發現
16:41:39,325 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (ServerService Thread Pool -- 57) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:345)
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:352)
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:287)
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1328)
未完待續
應該是網絡問題,明天再看。