试一试 interceptor
用于记录目的。创建了一个扩展 CrudRepository
与 Redis
实体。我有简单的 repository.save(entity)
方法。
我的拦截器如下所示:
public class MyRepoInterceptor extends EmptyInterceptor {
@Override
public boolean onSave(Object entity, Serializable id,
Object[] state, String[] propertyNames, Type[] types) {
log.info("Saving...");
return super.onSave(entity, id, state, propertyNames, types);
}
@Override
public boolean onPrepareStatement(String sql) {
log.info("Prepared Statement");
return super.onPrepareStatement(sql);
}
}
我看不到消息 Saving...
,显然截获器不在这里工作。
但是,在同一个应用程序中,我有另一个 mySQL
. 在这里,我有一个存储库方法 findByXXX
. 拦截器正在拦截这个方法,我看到了消息 Prepared Statement
.
我的拦截器配置类:
@Component
public class RepoInterceptor implements HibernatePropertiesCustomizer {
@Autowired
MyRepoInterceptor myRepoInterceptor;
@Override
public void customize(Map<String, Object> hibernateProperties) {
//Tried this too. but no luck
//hibernateProperties.put("hibernate.session_factory.interceptor", myRepoInterceptor);
hibernateProperties.put("hibernate.ejb.interceptor", myRepoInterceptor);
}
}
有人试过这个吗?我所要做的就是,在应用程序的任何地方记录“crud/jparepository”方法对数据库的任何调用,而不强迫开发人员进行记录。
如果以上不是正确的解决方案,还有其他更好的解决方案吗?
暂无答案!
目前还没有任何答案,快来回答吧!