我使用spring引导,并希望将默认的隔离级别更改为READ_UNCOMMITTED。
我搜索并找到了属性hibernate.connection.isolation,但我尝试了它,但它没有工作。
我的配置如下:
private Properties additionalJpaProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "validate");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
properties.setProperty("hibernate.connection.isolation", String.valueOf(Connection.TRANSACTION_READ_UNCOMMITTED));
return properties;
}
@Primary
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) throws SQLException {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan(this.packages);
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(this.additionalJpaProperties());
return em;
}如何使用spring引导更改隔离级别?
发布于 2017-10-25 11:50:48
如果有人需要解决的话。我找到的唯一解决办法是:
扩展HibernateJpaDialect类并实现beginTransaction方法来设置事务隔离。看起来是这样的:
@Service
public class CustomHibernateJpaDialect extends HibernateJpaDialect {
@Override
public Object beginTransaction(final EntityManager entityManager,
final TransactionDefinition definition) throws PersistenceException,
SQLException, TransactionException {
Session session = getSession(entityManager);
if (definition.getTimeout() != TransactionDefinition.TIMEOUT_DEFAULT) {
session.getTransaction().setTimeout(definition.getTimeout());
}
entityManager.getTransaction().begin();
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
DataSourceUtils.prepareConnectionForTransaction(connection, definition);
connection.setTransactionIsolation(TransactionDefinition.ISOLATION_READ_UNCOMMITTED);
}
});
return prepareTransaction(entityManager, definition.isReadOnly(), definition.getName());
}
}在entityManagerFactory的配置中,有必要设置所创建的方言:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
DataSource dataSource,
CustomHibernateJpaDialect customHibernateJpaDialect) throws SQLException {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaDialect(customHibernateJpaDialect);
return em;
}https://stackoverflow.com/questions/46761383
复制相似问题