java - 如何让 dropwizard 应用程序忽略所有调用,直到启动完成
问题描述
我被要求为我们的 dropwizard 应用程序设置一种方法来忽略所有调用,直到初始化完成。我们拥有的应用程序使用 guava 缓存来复制数据库;因此,所有调用都转到它而不是直接转到数据库。此缓存是在初始化期间构建的 - 因此,我想设置 dropwizard 的初始化方法以提供等待消息,直到缓存完成构建,而不是尝试接受任何调用。但是,我不确定该怎么做。
到目前为止,我确实知道任何解决方案都必须进入主类的初始化方法,并且有办法检查初始化是否完成。我试过看看 dropwizard 是否有任何检查初始化是否完成的钩子,但我没有找到任何东西。
解决方案
HTTP(S) 连接器仅在Application#run(T configuration, Environment environment)
方法完成后启动。
您可以添加阻塞方法调用或使用 aCountDownLatch
来等待缓存被填充。
例子:
@Override
public void run(Configuration configuration, Environment environment) {
Cache dbCache = initializeCache(configuration);
// Custom initializations
// [...]
populateCache(dbCache); // Blocks until the cache has been successfully populated
}
或者,如果您要异步填充缓存,则可以使用CountDownLatch
:
@Override
public void run(Configuration configuration, Environment environment) {
Cache dbCache = initializeCache(configuration);
CountDownLatch countDownLatch = new CountDownLatch(1);
// Custom initializations
// [...]
asyncPopulateCache(dbCache, countDownLatch);
countDownLatch.await(); // Blocks until the cache has been successfully populated
}
推荐阅读
- wpf - 用计算的比率绑定 2 个文本框
- reactjs - 为什么测试会影响组件中未使用的减速器?
- javascript - 将数组中对象和嵌套对象的键值对重新组合到新数组中
- webview2 - webView.EnsureCoreWebView2Async(null) 给出一个异常类未注册
- django - Django:像 blog.user.username 这样的表达式是否在 Django 中执行了额外的数据库操作?
- python - 在 ndarrays 中查找最接近零的值
- json - 使用连接运行 json 的正确包?
- java - 获取异常“java.lang.NoSuchMethodError:org.openqa.selenium.WebElement.getDomAttribute(Ljava/lang/String;)Ljava/lang/String;” 在硒 4
- javascript - Javascript 如果可以打开应用程序的自定义 URL,而不是切换显示:阻止
- svn - svn up 不更新特定文件夹