当前位置: 首页 > 知识库问答 >
问题:

如何在clojure Web应用程序中有条件地加载功能

胡夕
2023-03-14

如何避免在生产uberjar中加载此代码,但仍然可以从开发和测试期间运行时的动态重新编译中受益?

共有1个答案

干鑫鹏
2023-03-14

Leiningen中的:source-paths键决定检查哪些目录以获取Clojure源代码。使用:source-paths的每个环境设置,可以防止在已删除的Uberjar中包含不需要的名称空间。

下一个难题是确保您的代码不依赖于生产实例上的dev代码。这可以在环境库的帮助下完成。

; excerpt of project.clj
(defproject your-org/your-project "version"
   :source-paths ["src"] ; the main source location
   :profiles {:dev {:source-paths ["dev-src"] ; added directory
                    :env {:dev "true"}}}
 ...)

; excerpt of project code for src/your_org/your_project.clj
(ns your-org.your-project
  (:require environ.core :refer [env]))

(def maybe-launch-optional-thing
  (if (= (env :dev) "true") ; checking a profile specific value
   (do (require 'dev-only-dep.core)
       (resolve 'dev-only-dep/launch))
   (constantly nil))

...

(defn -main
  [& args]  
  (maybe-launch-optional-thing)
  ...)

如果包装需要,以及解析,确保此代码有效,无论dev-only-dep.core是否可用。maybe-launing-optional-thing绑定到:dev配置文件下的可选命名空间中的适当函数,否则是不可操作的。

 类似资料:
  • 我正在尝试在我的多租户应用程序中实现假客户概念。我有两个微服务。在其中一个微服务中,我编写了从数据库获取数据的API。我需要在我的其他微服务中使用这些数据。为此,我使用了假客户概念。我需要第二个微服务加载期间的数据。但这并没有发生。我有以下错误 这是我的基于数据源的MultitenantConnectionProviderImpl。类,我在其中编写了伪客户机逻辑 这是一个虚拟客户端。我将第二个微服

  • 问题内容: Q1。假设我想在按下主“删除”按钮之前更改用户标记为要删除的每个“项目”的外观。(这种立即的视觉反馈应该消除了众所周知的“您确定吗?”对话框的需要。)用户将选中复选框以指示应删除哪些项目。如果未选中此复选框,则该项目应恢复为正常外观。 应用或删除CSS样式的最佳方法是什么? Q2。假设我想允许每个用户个性化展示我的网站。例如,从一组固定的字体大小中进行选择,允许用户定义前景色和背景色等

  • 我想实现下面的用例——我的Spring Boot应用程序应该只在应用程序中有某个属性时启动。yaml设置为: 如果未设置该属性,则上下文初始化将失败,并显示一条消息,表明该属性丢失。 我在这个主题中找到了如何实现它:Spring启动-检测和终止,如果属性没有设置?但是我不能遵循这种方法的问题是,在加载检查此属性的bean之前,上下文初始化可能会失败。 例如,如果其他bean由于缺少另一个属性而无法

  • 在html: 在cmsText.js中 在cmsText.html 我希望输入标签中的“必需”字仅在设置为true时显示,在设置为false时该字消失。有人能帮忙吗?

  • 我刚接触Spring。 到目前为止,在我的应用程序中,每次我需要使用bean时,我都会加载XML。 Application Context上下文=new ClassPathXmlApplication ationContext("Applicationontext.xml"); 因此,在每个需要加载特定bean的类中,我都使用上面的行。 在效率或正确使用方面,我想知道这是否是正确的使用(我怀疑不是