首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring配置文件启用/禁用web.xml筛选器

使用Spring配置文件启用/禁用web.xml筛选器
EN

Stack Overflow用户
提问于 2015-06-12 10:33:03
回答 1查看 3.2K关注 0票数 4

我有一个Spring应用程序,它可以使用两个不同的持久性API:

  • 春季数据JPA
  • 弹簧数据Neo4j

当使用Spring时,我需要声明"OpenEntityManagerInViewFilter“中的"web.xml”来执行延迟加载:

代码语言:javascript
复制
<filter>
    <filter-name>OpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>OpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

问题是,在使用Spring Neo4j时,我不能继续启用此筛选器。将其启用将导致以下运行时错误:

代码语言:javascript
复制
No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

我希望选择与Spring一起使用的数据库(例如spring.profiles.active=relational-databasespring.profiles.active=graph-database)。

问题:当配置文件是“关系数据库”时,我如何启用"OpenEntityManagerInViewFilter“,而当概要文件是”图形数据库“时,如何禁用它?

谢谢!

相关问题:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 15:11:11

好吧,我解决了这个问题。我的新"web.xml“使用DelegatingFilterProxy而不是org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter

代码语言:javascript
复制
<filter>
    <filter-name>toggleOpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>toggleOpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后在我的ApplicationContext中创建一个名为"toggleOpenEntityManagerInViewFilter“的bean (它是filter-name值)。诀窍是根据Spring配置文件实例化不同的类:

代码语言:javascript
复制
<beans profile="graph-database">
    <bean id="toggleOpenEntityManagerInViewFilter" class="my.project.dal.utils.spring.DoNothingFilter"/>
</beans>
<beans profile="relational-database">
    <bean id="toggleOpenEntityManagerInViewFilter" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter"/>
</beans>

my.project.dal.utils.spring.DoNothingFilter被定义为:

代码语言:javascript
复制
public class DoNothingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}

这似乎很管用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30800916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档