0

Spring キャッシュ (EHCache を使用) と Spring 検証を統合すると、プロキシの順序が正しく設定されません。

キャッシュ アノテーション (この場合は CacheEvict) が処理される前に、検証アノテーションを処理する必要があります。

私の構成クラス:

@EnableCaching( order = Ordered.LOWEST_PRECEDENCE )
@Configuration
public class CommonConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() throws IOException {

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor( LocalValidatorFactoryBean validator ) {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator( validator );
        methodValidationPostProcessor.setOrder( Ordered.LOWEST_PRECEDENCE- 1 );
        return methodValidationPostProcessor;
    }

    @Bean
    public EhCacheCacheManager cacheManager() {
        EhCacheCacheManager cacheManager = new EhCacheCacheManager();
        cacheManager.setCacheManager( ehCacheManager().getObject() );
        return cacheManager;
    }

    @Bean
    public EhCacheManagerFactoryBean ehCacheManager() {
        EhCacheManagerFactoryBean ehcache = new EhCacheManagerFactoryBean();
        ehcache.setConfigLocation( new ClassPathResource( "ehcache.xml" ) );
        return ehcache;
    }

}

そして私の関連する依存関係:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>

        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.10.2</version>
        </dependency>

問題のあるインターフェイスと実装クラス:

@Validated
public interface MyRepository {

    public void update(@NotNull MyEntity entity);

}


@Repository
public class MyRepositoryImpl implements MyRepository {

    @CacheEvict(cacheNames = {"entityCache"});
    public void update(MyEntity entity);
}

ご覧のとおり、MethodValidationPostProcessor の順序を Orderer.LOWEST_PRECEDENCE-1 に設定し、キャッシュの順序を Ordered.LOWEST_PRECEDENCE (@EnacbleCaching 内) に設定しました。

それはプロキシの順序を設定する正しい方法ですか?

問題は、インターフェースに検証アノテーションがあり、実装にキャッシュアノテーションがあることに関連している可能性がありますか?

4

1 に答える 1