centos7 安裝 keycloak 連接外部mysql


由於我是已經安裝和配置好了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)

 
        
未完待續

應該是網絡問題,明天再看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM