我正在学习Clojure (1.10),并正在使用Luminus框架(3.93)编写一个小型web应用程序,并使用Monger (3.1.0)连接到MongoDB实例。Luminus生成一些脚手架代码,即在<myproject>.db.core启动时创建数据库连接池(使用函数<myproject>.db.core)。
(ns myproject.db.core
(:require [monger.core :as mg] ... ))
(defstate db*
:start (-> env :database-url mg/connect-via-uri)
:stop (-> db* :conn mg/disconnect))
...My problem: --如果此时MongoDB实例不可用,则不会显示任何警告问题。网页是服务的,直到一个人需要调用一个蒙古人功能。此时,应用程序“搅动”,然后超时(设置为30)和异常/堆栈跟踪错误屏幕(这除了是一个可怕的用户体验,也可能公开的代码/数据,应该是保密的)。
当先决条件数据库不可用时,我如何才能最好地防止启动应用程序?
第一次尝试(不可否认是笨拙的)是在上面的启动代码中插入一个Monger调用。这将导致启动期间的超时异常(带有异常消息),而不是启动web应用程序。有什么更好的方法?
另外,您知道有一种方法可以让这样的问题停止启动过程而不是重新尝试和输出失败消息吗?
(defstate db*
:start (-> env :database-url mg/connect-via-uri
; clumsy way to catch timeouts due to no database when starting up:
(#(mg/get-db-names (:conn %)) %))
:stop (-> db* :conn mg/disconnect))https://stackoverflow.com/questions/66723774
复制相似问题