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)


未完待续

应该是网络问题,明天再看。

作者注: 本站文章除注明转载外,均为本站原创或编辑,欢迎大家转载,但请务必注明出处,尊重他人成果,谢谢。 任何问题请联系1187616732@qq.com
原文地址:https://www.cnblogs.com/laijx/p/14819123.html