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

从spring boot runtime Application.properties动态填充.js属性的最佳方法?

邓兴为
2023-03-14

我们有一个微型应用程序,它由前端开发人员组装起来,然后“翻墙而去”。它定义了一个属性文件settings.js:

var SERVERROOT = 'http://solr:8983/solr/operations/select/';

由html引用:

 <script type='text/javascript' src="js/settings.js"></script>

我想在运行时在application.yml中定义solr路径,如下所示:

app:    
   solr:
      path: 'http://solr:8983/solr/operations/select/'
 -Dapp.solr.path=...

可能

我曾考虑将'settings.js'作为一个Tymeleaf模板(settings.js.html),并让一个spring控制器从application.properties填充模型。

共有1个答案

常智勇
2023-03-14

您可以使用ResourceTransformer:

@Component
public class InjectSolrPathResourceTransformer implements ResourceTransformer {
    private final MySetting settings; // inject via constructor

    @Override
    public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain) throws IOException {
if (request.getServletPath().equals("/js/settings.js")) {
            byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
            String content = new String(bytes, StandardCharsets.UTF_8);
            content = content.replace("var SERVERROOT = SERVERROOT_VALUE",
                                      "var SERVERROOT = '" + settings.getSolrPath() + "'");

            return new TransformedResource(resource, content.getBytes(StandardCharsets.UTF_8));
        } else {
            return resource;
        }
    }
}

这假设您将settings.js更改为:

var SERVERROOT = SERVERROOT_VALUE

要使用ResourceTransformer,请在WebMVCConfigureer中注册它:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    // inject this via constructor
    private final InjectSolrPathResourceTransformer resourceTransformer;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**")
                .addResourceLocations("classpath:/public/js/")
                .addTransformer(resourceTransformer);
    }
}
 类似资料:
  • 我正在创建一个订单服务,这是RestServices世界的新功能。 我需要将订单模型读入并在DB中持久化。 为此,我有以下方法: 一切正常,但我对目前的设计有顾虑: 我正在读取输入到DTO 要存储对象,我将转换为订单对象,它将由Hibernate保存 再次发送响应回来,我正在将实际的订单对象转换为DTO。 最后,我将创建每个请求4-5个对象,如果我的应用程序得到100个请求,它可能会遇到内存问题。

  • 我这里有一个相对复杂的JavaCRUD用Swing组件编写。我正在考虑在JavaFX中重写它的GUI。现在的问题是: 我创建了一个类,用于保存下载的数据、存储SQL命令和有关任何给定表的其他信息。我在表的构造函数中定义了该表的数据结构。这样地: 这样一来,每当数据库表结构发生变化时,我就不必接触这个类的代码。我将镜像构造函数中的更改,并相应地编辑GUI。 (在类内部,数据存储为ArrayList。

  • 我有一个Java类,它从JSON文件/数据库/其他东西加载我的应用程序的属性。 我已将配置为Spring上下文中的bean。 现在我想在spring上下文文件中使用中的一个值来表示不支持SpEL的内容,例如spring集成日志通道适配器,例如。 是否有一种方法可以设置可以使用SpEL填充的“属性”?

  • 问题内容: 当前,我们的开发团队使用这种模式,但是我不禁想知道是否存在更快或更有效的html方式来完成同一任务。 的HTML 这是Javascript: 问题答案: 这是我为此编写的函数。我不确定它是否比jQuery Templates更快。 它一次创建并附加一个Option元素,这可能比Templates慢 。我怀疑Templates会构建整个HTML字符串,然后一次创建所有DOM元素。那可能更

  • 本文向大家介绍jQGrid动态填充select下拉框的选项值(动态填充),包括了jQGrid动态填充select下拉框的选项值(动态填充)的使用技巧和注意事项,需要的朋友参考一下 本文给大家分享一段代码关于技巧jqgrid动态填充select 下拉框的选项值,非常不多说了,直接给大家贴代码了,具体代码如下所示: 注意:要return以及async:false否则没有效果 在colModel:中设置

  • 问题内容: 我已经看到了许多不同的方法来创建和填充数字表。但是,创建和填充一个的最佳方法是什么?从“最重要”到“最不重要”定义“最佳”: 用最佳索引创建的表 产生最快的行 用于创建和填充的简单代码 问题答案: 这是一些从网上获取的代码示例,以及对该问题的解答。 对于每种方法,我都修改了原始代码,因此每种方法都使用相同的表和列:NumbersTest和Number,具有10,000行或尽可能接近的行