EhCacheManagerFactoryBean - BeanCreationException для org.springframework v 4.3.27 или любого 4.3.x, но работает для 4.1.6 и 4.2.5 - PullRequest
1 голос
/ 04 августа 2020

Мы используем EhCacheManagerFactoryBean, который перестал работать после обновления версий Spring Framework с 4.1.6 до 4.3.27. Я получаю BeanCreationException при запуске приложения.

Я попытался переопределить зависимости springframework до 4.1.6, и это сработало. Так же работало на 4.2.5 и 4.2.8. Не работает для 4.3.27 и 4.3.5 (не пробовал другие версии 4.3.x).

Вот мои соответствующие зависимости pom

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache-core</artifactId>
                <version>2.6.7</version>
        </dependency>

Я мог бы выделить проблему, актуальную для spring-context, spring-aop и spring-context-support (понижен до 4.2.5 и оставлен на 4.3.27 - это сработало.)

определение bean-компонента кеширования - bean-компонент cacheManager используется как ссылка для определения других bean-компонентов,

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd 
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:shared="true" />

<bean id="abstractCache" class="<class that extends org.springframework.cache.ehcache.EhCacheFactoryBean>" p:cache-manager-ref="cacheManager" abstract="true" />
....

</beans>

Exception, не удается разрешить ссылку на bean-компонент cacheManager при установке свойства bean-компонента cacheManager; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания bean-компонента с именем 'cacheManager', определенным в файле

stacktrace, Вызвано: java .lang.IllegalStateException: Singleton экземпляр еще не инициализирован в org.springframework.util.Assert.state (Assert. java: 70) в org.springframework.beans.factory.config.AbstractFactoryBean.getSingletonInstance (AbstractFactoryBean. java: 180) в org.springframe .beans.factory.config.AbstractFactoryBean.access $ 200 (AbstractFactoryBean. java: 61) в org.springframework.beans.factory.config.AbstractFactoryBean $ EarlySingletonInvocationHandler.invoke (AbstractFactoryBean) 1026. * .sun. proxy. $ Proxy20.iterator (Неизвестный источник) по адресу org.springframework.cache.ehcache.EhCacheFactoryBean.afterPropertiesSet (EhCacheFactoryBean. java: 291) по адресу org.springframework.beans.wutoctor.supportactory.Abstractapekee (AutoCAD). *: 1677) в org.springframewor k.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory. java: 1615)

Благодарю за любую помощь. Спасибо.

1 Ответ

0 голосов
/ 04 августа 2020

У меня была эта xml конфигурация для Spring 4.3.14.RELEASE и Ehcache 2.10.6 ниже:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/cache 
        http://www.springframework.org/schema/cache/spring-cache.xsd">

    
    <!-- Added cache annotation support -->
    <cache:annotation-driven
        cache-manager="ehCacheCacheManager" />

    <!-- Added cache manager -->
    <bean id="ehCacheCacheManager"
        class="org.springframework.cache.ehcache.EhCacheCacheManager"
        p:cacheManager-ref="ehCacheManagerFactoryBean" />

    <!-- Added cache manager factory -->
    <bean id="ehCacheManagerFactoryBean"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
        p:configLocation="classpath:ehcache.xml" p:shared="true" />

</beans>

Она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...