jfinal如何添加context-param

之前的旧项目整合h2数据库web.xml内容如下

<context-param>
    <param-name>db.url</param-name>
    <param-value>jdbc:h2:~/test</param-value>
</context-param>

如何在jfinal中添加context-param参数呢?

我的尝试如下

image.png

ConsumerWebBuilder添加2个监听器

public class ConsumerWebBuilder implements Consumer<WebBuilder> {

  @Override
  public void accept(WebBuilder builder) {

    // builder.addServletInitParam("myServlet", "key", "value");
    // 配置 Listener
    // org.h2.server.web.DbStarter
    builder.addListener("com.uairobot.bill.jfinal.listener.MyListener");
    builder.addListener("org.h2.server.web.DbStarter");
  }
}

在自定义的监听器中获取servetContext,设置conttextParam

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyListener implements ServletContextListener {

  @Override
  public void contextInitialized(ServletContextEvent servletContextEvent) {
    org.h2.Driver.load();
    ServletContext servletContext = servletContextEvent.getServletContext();
    servletContext.setInitParameter("db.url", "litong");
    String value = servletContext.getInitParameter("db.url");
    log.info("db.url:{}", value);
  }
}

这做确实可以添加context-param中,但是问题是

2个listener那个先执行,必须是设置参数的先执行?

在com.jfinal.server.undertow.WebBuilder中新增一个addServetContext的方法,请指导

评论区

JFinal

2020-07-10 11:54

先试试这个:
UndertowServer.create(...)
.configWeb(web -> {
web.addListener("...");
web.addInitParameter("...", "...");
})
.start();

如果上面这个不行,试一下这个:
UndertowServer.create(...)
.configWeb(web -> {
DeploymentInfo di = web.getDeploymentInfo();
di.xxx(...); // 这里调用 di 内的一些方法尝试实现功能
})
.start();
先通过 web.getDeploymentInfo() 获取到一个 DeploymentsInfo 对象,然对所有配置都可以通过这个对象中的方法来配置

热门反馈

扫码入社