Keycloak 在数据库重新启动后,KeyClope无法连接外部数据库?

Keycloak 在数据库重新启动后,KeyClope无法连接外部数据库?,keycloak,Keycloak,我们使用的是keydove 4.2.1.Final,我们注意到了一些奇怪的问题。keydove使用的是外部数据库[mariadb] 如何重现该问题? 安装并运行KeyClope 使用外部数据库存储数据,我们使用mariadb Keyclope启动/运行,MariaDB启动并运行 现在停止Mariadb服务systemctl停止Mariadb,然后启动Mariadbsystemctl启动Mariadb,并检查keydepot是否工作 尝试登录到KeyClope并检查它是否不允许登录 在服务器日志中

我们使用的是keydove 4.2.1.Final,我们注意到了一些奇怪的问题。keydove使用的是外部数据库[mariadb]

如何重现该问题?

  • 安装并运行KeyClope
  • 使用外部数据库存储数据,我们使用mariadb
  • Keyclope启动/运行,MariaDB启动并运行
  • 现在停止Mariadb服务
    systemctl停止Mariadb
    ,然后启动Mariadb
    systemctl启动Mariadb
    ,并检查keydepot是否工作
  • 尝试登录到KeyClope并检查它是否不允许登录
  • 在服务器日志中,它将显示连接已关闭
  • 解决方案1-

    重新启动Mariadb后,还必须启动KeyClope服务
    重新启动服务密钥斗篷
    ,然后密钥斗篷将开始正确响应


    但这不是一个可行的解决方案,我正在为此寻找一个合适的解决方案。有人曾经遇到或检查过这种问题吗?

    最后,通过修改keydape的stanlone.xml文件,这个问题得到了解决。您可以在这个位置找到该文件
    /opt/keydape/standalone/configuration/standalone.xml
    ,您必须在文件中添加以下行

     <validation>                   
           <check-valid-connection-sql>select 1</check-valid-connection-sql>
           <background-validation>true</background-validation>
           <background-validation-millis>15000</background-validation-millis>
        </validation>
    
    
    选择1
    真的
    15000
    
    添加上述更改后,应在
    标记内添加此行
    如下所示

    <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"> 
         <connection-url>jdbc:mariadb://localhost:3306/DBName?autoReconnect=true</connection-url>
               <driver>mariadb</driver> 
                <security> 
                 <user-name>user</user-name> 
                 <password>${VAULT::datasource::default-password::1}</password>
                 </security>
                 <validation>                     
                 <check-valid-connection-sql>select 1</check-valid-connection-sql>
                 <background-validation>true</background-validation>
                  <background-validation-millis>15000</background-validation-millis>
                  </validation>
    </datasource>
    
    
    jdbc:mariadb://localhost:3306/DBName?autoReconnect=true
    马里亚布
    使用者
    ${VAULT::datasource::默认密码::1}
    选择1
    真的
    15000
    
    添加验证检查后,KeyClope将在给定的时间间隔内继续在后台检查与数据库的连接。因此,即使连接隧道已断开,它仍将重新连接到数据库。 没有数据源中的验证,一旦连接断开,它就不会重新连接。这就是为什么我们需要添加

     <validation>                   
           <check-valid-connection-sql>select 1</check-valid-connection-sql>
           <background-validation>true</background-validation>
           <background-validation-millis>15000</background-validation-millis>
        </validation>
    
    
    选择1
    真的
    15000
    

    希望这能澄清您的疑问。

    我和您面临着完全相同的问题,您的解决方案奏效了。但是你介意解释一下为什么这些代码行是有效的吗?@henry不确定,因为它是1年前的问题,但看起来它是数据库方面的问题,而不是Keyclope方面的问题。很好的澄清