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 那段:

1
2
3
4
5
6
7
8
9
<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)


复制代码
未完待续

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

 

posted on   Laijx  阅读(858)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示