Установить таймаут блокировки программно Spring Boot JPA - PullRequest
0 голосов
/ 09 ноября 2018

у меня

@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 . Я видел несколько примеров установки javax.persistence.lock.timeout в свойствах, передаваемых методу EntityManager find, но я не уверен, как лучше включить вызовы EntityManager в репозиторий Spring, и кажется, что должен быть более Spring-y способ (например, установка spring.jpa.properties.javax.persistence.lock.timeout=600 в application.properties, который, похоже, не работает).

Так как мне это сделать?

1 Ответ

0 голосов
/ 10 ноября 2018

Я закончил тем, что добавил

@Autowired
private Environment env;

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

к моему @SpringBootApplication -аннотированному основному классу, который, казалось, делал свою работу. Не уверен, что это лучший способ. («action.timeout »- это имя свойства, которое я составил).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...