복붙노트

[SPRING] / 활성화 봄 프로파일을 사용하여 web.xml에 필터를 해제

SPRING

/ 활성화 봄 프로파일을 사용하여 web.xml에 필터를 해제

나는 두 개의 서로 다른 퍼시스턴스 API를 사용할 수있는 봄 응용 프로그램이 있습니다 :

스프링 데이터 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>

문제는 내가 봄 데이터 Neo4j를 사용할 때 사용 가능이 필터를 유지할 수 있다는 것입니다. 이 활성화두면 다음과 같은 런타임 오류로 연결 :

No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

나는 봄 프로파일 (예를 들어, spring.profiles.active = 관계형 데이터베이스 또는 = spring.profiles.active 그래프 데이터베이스)와 함께 사용할 데이터베이스를 선택합니다.

질문 : 프로필 "관계형 데이터베이스는"때 "OpenEntityManagerInViewFilter"을 활성화하고 프로필은 "그래프 데이터베이스"인 경우 사용하지 않도록 할 수있는 방법?

감사!

관련 질문 :

해결법

  1. ==============================

    1.좋아, 나는 이것을 정리. 나의 새로운 "의 web.xml은"대신 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter의 DelegatingFilterProxy을 사용합니다 :

    좋아, 나는 이것을 정리. 나의 새로운 "의 web.xml은"대신 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter의 DelegatingFilterProxy을 사용합니다 :

    <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"라는 이름의 빈을 만들 수 있습니다. 트릭은 봄 프로파일에 따라 다른 클래스를 실체화하는 것입니다 :

    <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는 다음과 같이 정의된다 :

    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() {
        }
    }
    

    이것은 작동하는 것 같다.

  2. from https://stackoverflow.com/questions/30800916/enabling-disabling-a-web-xml-filter-using-a-spring-profile by cc-by-sa and MIT license