Jetty使用JNDI配置Druid数据库源filters丢失

JFinal 3.2项目,因集成的需要使用 Jetty JNDI配置数据源,并且设置了解filters

<New id="mssqlDS" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg>ResourceOne/DataSource</Arg>
    <Arg>
        <!--连接SQL Server的配置-->
        <New class="com.alibaba.druid.pool.DruidDataSource">
            <Set name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
            <Set name="url">jdbc:sqlserver://sql03.msdi.cn:1433; DatabaseName=R1_Portal</Set>
            <Set name="username">coa</Set>
            <Set name="password">zny-coa-2103</Set>
            <Set name="filters">stat,mergeStat</Set>

然而通过 InitialContext().lookup("ResourceOne/DataSource") 获取到 DruidDataSource 后没有 filter了。

调试Jetty、Druid发现在启动的时候filters有成功设置。

请问这个是什么原因,有没有办法解决呢?

评论区

JFinal

2018-01-19 17:33

在 DruidDataSource 的 setFilters(String) 方法中设置一个断点,看程序执行没执行进去

cnzzr

2018-01-19 17:37

有成功执行的,测试这两种都执行了

JFinal

2018-01-19 17:44

@cnzzr stat 过滤器并不是独立运作的,还需要 StatViewServlet 配合使用,才会有数据

本质上来说,这个问题与 jfinal 无关,因为你的配置是在操作 DruidDataSource,对其注入 filters ,jfinal 不会干预这个事情,更不会干预 DruidDataSource 的运作

cnzzr

2018-01-19 17:47

是的,这与JFinal没有关系,目前我在JFinalConfig中再次配置Filter是可以达到目标的,只是看是否可以通过 jetty-env.xml 的配置来实现

JFinal

2018-01-19 17:48

@cnzzr 只要是确实配置成功了,无论在哪配置都可以

JFinal

2018-01-19 17:49

@cnzzr 注意检查一下, jfinal ActiveRecordPlugin 使用的 DataSource 是不是确实是你配置的这个  DruidDataSource, 单步调试一下

cnzzr

2018-01-19 17:58

Jetty启动时断点抓到的DataSource 与 InitialContext().lookup("ResourceOne/DataSource") 获取到 DruidDataSource 不是同一个对象。