Benny
Benny

Reputation: 1465

Spring Boot @RepositoryEventHandler not invoked

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.

Upvotes: 9

Views: 9183

Answers (1)

Snekse
Snekse

Reputation: 15799

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.

Upvotes: 3

Related Questions