Gré*_*e C 3 spring web.xml spring-profiles
我有一个Spring应用程序,可以使用两个不同的持久性API:
使用Spring Data JPA时,我需要在"web.xml"中声明"OpenEntityManagerInViewFilter"来进行延迟加载:
<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>
Run Code Online (Sandbox Code Playgroud)
问题是我在使用Spring Data Neo4j时无法保持此过滤器.保持启用状态会导致以下运行时错误:
No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined
Run Code Online (Sandbox Code Playgroud)
我想选择与Spring配置文件一起使用的数据库(例如spring.profiles.active=relational-database
或spring.profiles.active=graph-database
).
问题:当配置文件是"关系数据库"时,如何启用"OpenEntityManagerInViewFilter",当配置文件是"图形数据库"时,如何禁用它?
谢谢!
相关问题:
DelegatingFilterProxy
.好的,我把它排除了.我的新"web.xml"使用DelegatingFilterProxy
而不是org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
:
<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>
Run Code Online (Sandbox Code Playgroud)
然后在我的ApplicationContext中,我创建了一个名为"toggleOpenEntityManagerInViewFilter"的bean(这是filter-name
值).诀窍是根据Spring配置文件实例化不同的类:
<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>
Run Code Online (Sandbox Code Playgroud)
的my.project.dal.utils.spring.DoNothingFilter
定义为:
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() {
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效.
归档时间: |
|
查看次数: |
1918 次 |
最近记录: |