数据库重启后Keycloak无法连接外部数据库?

Keycloak not able to connect external DB after database restart?

我们正在使用 Keycloak 4.2。1.Final 我们注意到一些奇怪的 issue.Keycloak 正在使用外部数据库 [Maria DB]

如何重现该问题?

  1. 安装并运行 Keycloak。
  2. 使用外部数据库存储数据,我们使用mariadb。
  3. Keycloak up/running,MariaDB up 和 运行ning
  4. 现在停止 Mariadb 服务 systemctl stop mariadb 然后启动 mariadb systemctl start mariadb 并检查 keycloak 是否工作
  5. 尝试登录 keycloak https://localhost:8666/auth 并检查它不允许登录。
  6. 在服务器日志中会显示连接已关闭

解决方案 1 -

重新启动 Mariadb 后,还必须启动 Keycloak 服务 service keycloak restart 然后 Keycloak 将开始正确响应。

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

最后通过修改 Keycloak.You 的 Stanalone.xml 文件解决了这个问题,可以在这个位置找到文件 /opt/keycloak/standalone/configuration/standalone.xml,你必须在文件 [=15] 中添加以下行=]

 <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/> 标记内 <datasource/> 将如下所示

<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>

添加验证检查后,Keycloak会以给定的时间间隔在后台继续检查与数据库的连接。因此,即使连接隧道断开,它也会重新连接到数据库。 如果没有数据源中的验证,一旦连接断开,它不会重新连接。这就是为什么我们需要添加

 <validation>                   
       <check-valid-connection-sql>select 1</check-valid-connection-sql>
       <background-validation>true</background-validation>
       <background-validation-millis>15000</background-validation-millis>
    </validation>

希望能澄清您的疑问。