Я использовал версию Spring 5.0.9, и у меня было 2 таких класса конфигурации:
@Configuration
@EnableTransactionManagement
@PropertySource(value= {"classpath:commonServices.properties"}, encoding = "UTF-8", ignoreResourceNotFound=false)
@Import(value= {DbCacheConfig.class})
@ComponentScan(basePackages= {"...."})
public class DbConfig {
}
@Configuration
@EnableCaching
public class DbCacheConfig extends CachingConfigurerSupport {
}
Все работало очень хорошо. Когда я начал свой тестовый класс или свой тест JUnit, был вызван класс DbCacheConfig, и все было в порядке.
Я только что обновил версию Spring до 5.1.0 и больше ничего. В этом случае @Import вроде не видно. Фактически DbCacheConfig не создается.
Я не понимаю, почему .... у вас есть какие-нибудь предложения?
Я добавлю его позже, когда буду в офисе .... спасибо! :)
@ M.Deinum Я создал здесь образец проекта github.com/angeloimm/spring_upgrade, где вы можете воспроизвести поведение. Спасибо
Что со всеми исключениями? Похоже, вы исключаете мир. Также зачем вам нужен @EnableCaching? Похоже, вы используете это, чтобы с нетерпением инициализировать кеши в спящем режиме ... Это на самом деле причина того, почему он ломается, поскольку LocalSessionFactory не может знать, что ему нужно дождаться инициализации CacheManager, он просто запускается, однако из-за вашего взломать ему нужна зависимость. Либо добавьте CacheManager в качестве аргумента метода, либо добавьте @DependsOn("cacheManager") к методу sessionFactory.
Я добавил исключения просто потому, что не хочу дублировать библиотеки (я знаю, что maven справится с этим и может без проблем опустить дублированные библиотеки, но это моя личная привычка). Дело в том, почему, если я использую Spring 5.0.9, диспетчер кеша вызывается до конфигурации гибернации, а если я использую Spring 5.1, это не так. Я знаю, что могу добавить @DependsOn, но почему весной 5.0.9 в этом нет необходимости?
Потому что нет никакой гарантии в порядке загрузки / запуска bean-компонентов, который может меняться между версиями Spring. Однако реальная проблема в том, что вы в основном используете хак, который вам не следует делать, это сработало случайно в более старой версии, а не по дизайну.
Хорошо, хорошо ... Я думал об этом и согласен с вами ... Это была моя ошибка, и в прошлом мне везло :) Извините и спасибо
Что касается @Import, то были изменения, но только в области обнаружения вложенного класса @Configuration. Так что это не применимо, еще одна вещь, которая изменилась, - это тот факт, что CacheManager теперь собирается только в тот момент, когда это необходимо (по причинам производительности и сканирования). Но поскольку вы на самом деле не используете диспетчер кеша (по крайней мере, не здесь), он никогда не будет инициализирован. Даже если бы это было так, его все равно можно было бы инициализировать после bean-компонента SessionFactory. Если вы зависите от bean-компонентов, вы хотите сделать это явным, чтобы Spring мог определять порядок инициализации bean-компонентов.
Еще одна вещь, касающаяся исключения, не добавляет ничего, кроме нечеткости. Если вы хотите принудительно установить определенную версию библиотеки, используйте раздел dependencyManagement. Единственное, что вам нужно / нужно, это, вероятно, commons-logging, хотя это тоже не должно быть проблемой.
Пожалуйста, добавьте свой тестовый класс.