【发布时间】:2017-11-24 02:57:56
【问题描述】:
从 Spring Boot 2.0.0 M2 升级到 2.0.0 M6 后,我的 Hibernate 拦截器实现不再工作。
我的旧实现:
@Configuration
public class HibernateConfiguration extends HibernateJpaAutoConfiguration {
private HibernateStatisticsInterceptor hibernateStatisticsInterceptor;
public HibernateConfiguration(DataSource dataSource, JpaProperties jpaProperties, ObjectProvider<JtaTransactionManager> jtaTransactionManager, ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers, ObjectProvider<List<SchemaManagementProvider>> providers, HibernateStatisticsInterceptor hibernateStatisticsInterceptor) {
super(dataSource, jpaProperties, jtaTransactionManager, transactionManagerCustomizers, providers);
this.hibernateStatisticsInterceptor = hibernateStatisticsInterceptor;
}
@Override
protected void customizeVendorProperties(Map<String, Object> vendorProperties) {
vendorProperties.put("hibernate.session_factory.interceptor", hibernateStatisticsInterceptor);
}
}
但是对于 M5 或 M6,HibernateJpaAutoConfiguration 类发生了变化,不再扩展 JpaBaseConfiguration。
我尝试为每个 YAML 配置文件添加我的拦截器,但它不起作用。
我的拦截器:
@Component("hibernateStatisticsInterceptor")
public class HibernateStatisticsInterceptor extends EmptyInterceptor {
private static final long serialVersionUID = 5278832720227796822L;
private ThreadLocal<Long> queryCount = new ThreadLocal<>();
public void startCounter() {
queryCount.set(0l);
}
public Long getQueryCount() {
return queryCount.get();
}
public void clearCounter() {
queryCount.remove();
}
@Override
public String onPrepareStatement(String sql) {
Long count = queryCount.get();
if (count != null) {
queryCount.set(count + 1);
}
return super.onPrepareStatement(sql);
}
}
如何重新激活我的拦截器?
感谢任何提示
问候 里齐
【问题讨论】:
-
您可以尝试从github.com/spring-projects/spring-boot/blob/master/… 扩展而不是 HibernateJpaAutoConfiguration 吗?
-
这不是一个公共类,不能在它的包之外使用:/
-
经过更多研究后,我找到了添加 Hibernate 拦截器的方法。你可以通过properties/yml文件添加拦截器,但是我先试错了地方。应该是
spring.jpa.properties.hibernate.session_factory.interceptor = <class with path>我的新问题是,这个休眠创建了他自己的这个类的实例,并且与我从 spring 的实例不同:/关于 Rizzi
标签: hibernate spring-boot interceptor