我们使用的是Keycloak 4.2.1.Final,我们注意到了一些奇怪的问题。Keycloak使用的是外部数据库[Maria DB]
如何重现该问题?
systemctl stop mariadb
,然后启动mariadb systemctl start mariadb
并检查密钥斗篷是否有效解决方案1-
重新启动Mariadb之后,它也必须启动Keycloak服务
service keycloak restart
,然后Keycloak将开始正确响应。
但这不是可行的解决方案,我正在为此寻找合适的解决方案。有人遇到或检查过此类问题?
答案 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>