【问题标题】:Spring ApplicationListener Neo4j BeforeSaveEvent doesn't work with Spring 4.2.0.RELEASESpring ApplicationListener Neo4j BeforeSaveEvent 不适用于 Spring 4.2.0.RELEASE
【发布时间】:2015-11-05 14:05:23
【问题描述】:

在带有 Neo4jConfig 的 Neo4j/Spring Boot 应用程序中,我有以下钩子:

    @Bean
    protected ApplicationListener<BeforeSaveEvent<BaseEntity>> beforeSaveEventApplicationListener() {
        return new ApplicationListener<BeforeSaveEvent<BaseEntity>>() {
            @Override
            public void onApplicationEvent(BeforeSaveEvent<BaseEntity> event) {
                BaseEntity entity = event.getEntity();
                if (entity.getCreateDate() == null) {
                    entity.setCreateDate(new Date());
                } else {
                    entity.setUpdateDate(new Date());
                }
            }
        };
    }

它与 Spring 的早期版本 - 4.1.7.RELEASE 完美配合,但不适用于最新版本 4.2.0.RELEASE

我用

SDN 3.4.0.RC1Spring Boot 1.2.5.RELEASE

可能是什么原因?

【问题讨论】:

  • 如果 BaseEntity 是抽象的,那么值得快速检查一下是否将其设为公开非抽象可以修复它。如果是这样,那么这一定是某种回归。现在想不出别的了。
  • 不,它public class BaseEntity
  • 然后您可以使用依赖于核心 4.2 的引导 1.3.0.M3 进行测试。至少 boot 1.2.5 并没有被 core 4.2 官方支持。还要检查您是否没有混合核心版本,因为更新所有部门并不总是那么容易。

标签: spring spring-boot spring-data spring-data-neo4j


【解决方案1】:

使用 Spring Framework 4.2+,我的问题中的方法必须如下所示:

    @EventListener
    public void handleBeforeSaveEvent(BeforeSaveEvent<BaseEntity> event) {
        BaseEntity entity = event.getEntity();
        if (entity.getCreateDate() == null) {
            entity.setCreateDate(new Date());
        } else {
            entity.setUpdateDate(new Date());
        }
    }

更多详情:https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2018-10-30
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多