Spring Boot @RepositoryEventHandler not invoked

2020-02-28 08:05发布

I've got a @RepositoryEventHandler set up and it is not being invoked for some unknown reason.

@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {

    @Autowired
    private PasswordCrypto passwordCrypto;

    @HandleBeforeSave
    public void handleUserSave(User user) {
        if (user.getPassword() != null && !"".equals(user.getPassword())) {
            user.setPassword(passwordCrypto.encrypt(user.getPassword()));
        }
    }

    @HandleBeforeCreate
    public void handleUserCreate(User user) {
        user.setPassword(passwordCrypto.encrypt(user.getPassword()));
    }
}

The Repository:

public interface UserRepository extends CrudRepository<User, Long> {
    Optional<User> findOneByUsername(String username);
}

And my main class:

@SpringBootApplication
@EntityScan("de.ihrig.feuerwehr.hydranet.model")
@EnableJpaRepositories
@ComponentScan({
    "somepath",
    "somepath including the UserEventHandler"
})
public class ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }
}

Thanks for your help in advance, I just cannot find the error.

1条回答
\"骚年 ilove
2楼-- · 2020-02-28 08:43

There could be a couple of things going on.

You're repo isn't annotated w/ @RestResource, but I'm guess that was just an oversight.

I'm guessing the comments are correct and you're testing this through a unit test with an entry point that is not going through the REST API. The handlers only capture Repo events that are coming through that vector.

If you want to capture any repo event, regardless of entry point, then you want to use a AbstractRepositoryEventListener

The Spring Data Rest Events documentation covers this. Also see listening for repository events in spring boot.

查看更多
登录 后发表回答