Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 270
Benny Avatar asked Sep 26 '15 10:09

Benny


1 Answers

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.

like image 80
Snekse Avatar answered Oct 01 '22 07:10

Snekse