2015-09-26 75 views
4

我设置了一个@RepositoryEventHandler,并且由于某些未知原因未被调用。Spring Boot @RepositoryEventHandler未被调用

@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())); 
    } 
} 

资源库:

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

我的主类:

@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); 
    } 
} 

感谢您的帮助提前,我只是找不到错误。

+0

请你能说清楚你的意思是不工作?你怎么调用你的休息服务?同样的设置对我很有用,我相信这个问题可能在于你如何断定它不工作。 – ArunM

+10

好吧,我想我误解了@RepositoryEventHandler的概念。它在对Data-REST公开的存储库完成的HTTP请求上调用,但不是在以编程方式使用任何存储库方法时这是我所做的。注释的命名有点让人误解...... – Benny

+0

^^我认为这是你的答案。 –

回答

0

可能会有一些事情正在进行。

您的回购没有注释w/@RestResource,但我猜这只是一个疏忽。

我在猜测这些注释是正确的,并且您正在通过一个未经过REST API的入口点的单元测试来测试它。 handlers只捕获通过该向量传入的Repo事件。

如果你想捕捉任何回购事件,不管切入点,那么你要使用一个AbstractRepositoryEventListener

Spring Data Rest Events documentation涵盖这一点。另见listening for repository events in spring boot

+0

噢,和这:http://stackoverflow.com/questions/4895854/jpa-postpersist-postupdate-transaction – Snekse

+0

_“如果你想要捕获任何回购事件,无论入口点,那么你想使用AbstractRepositoryEventListener” _ < - 我不太确定。我只是测试了这个并且创建了一个AbstractRepositoryEventListener。它确实触发了我的REST调用,但不是在我的CommandLineRunner类中,我最初使用存储库将一些数据插入到我的数据库中。该类在包org.springframework.data.rest.core.event中的事实也使得它成为可疑的。 –

+1

@SebastiaanvandenBroek我认为你是对的。这些文档是针对SDR的,它们明确指出“REST导出器发出八个不同的事件_”,以便表明事件只能通过SPR触发。 另一种选择可能是使用[Spring Data JPA Auditing hooks](http://www.baeldung.com/database-auditing-jpa)作为'AuditingEntityListener'&'@ Pre/@ Post'注释,但我是不知道可能会引入什么行李。 – Snekse

相关问题