繁体   English   中英

以编程方式设置锁定超时Spring Boot JPA

[英]Set lock timeout programmatically Spring Boot JPA

我有

@Transactional(timeout = 600)
@Service
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerRepository customerRepository;

    @Override
    public void actOnCustomer(Long customerId) {
    ...

随着

public interface CustomerRepository extends CrudRepository<Customer, Long> {

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    Optional<Customer> findById(Long id);

客户行似乎已被锁定,并且超时值似乎具有适当的作用。

现在,我希望能够以编程方式和/或使用application.properties文件来设置超时值 我已经看到了一些在传递给EntityManagerfind方法的属性中设置javax.persistence.lock.timeout示例,但是我不确定如何最好地将EntityManager调用合并到Spring存储库中,似乎应该采取一种更加Spring-y的方式(例如,在application.properties中设置spring.jpa.properties.javax.persistence.lock.timeout=600 ,这似乎不起作用)。

那么我该怎么做呢?

我最终添加

@Autowired
private Environment env;

@PostConstruct
public void configureJpaTransactionManager() {
    ((JpaTransactionManager) this.platformTransactionManager).setDefaultTimeout(
                Integer.parseInt(env.getProperty("transaction.timeout", "3")));
}

到我的@SpringBootApplication主类,似乎可以完成工作。 不确定这是最好的方法。 (“ transaction.timeout”是我组成的属性名称)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM