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

时间:2019-02-25 11:20:35

标签: keycloak

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

如何重现该问题?

  1. 安装并运行Keycloak。
  2. 使用外部数据库存储数据,而我们使用mariadb。
  3. Keycloak启动/运行,MariaDB启动并运行
  4. 现在停止Mariadb服务systemctl stop mariadb,然后启动mariadb systemctl start mariadb并检查密钥斗篷是否有效
  5. 尝试登录到密钥斗篷https://localhost:8666/auth,并检查它是否允许登录。
  6. 在服务器日志中,它将显示“连接已关闭”

解决方案1-

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

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

2 个答案:

答案 0 :(得分:1)

添加验证检查后,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>

希望可以澄清您的疑问。

答案 1 :(得分:0)

最后,通过修改Keycloak的Stanalone.xml文件可以解决此问题。您可以在文件/opt/keycloak/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>

在添加以上更改<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>
相关问题