Как использовать Spring JPA Thread безопасно? - PullRequest
0 голосов
/ 08 октября 2019

Я использую Spring с jpa со следующей конфигурацией:

@Configuration
public class JPAConfiguration
{
    protected static final String PERSISTENCE_UNIT_NAME = "persistenceUnit";

    @Autowired
    private DatabaseConfigurationProperties databaseConfigurationProperties;

    @Bean
    public JpaTransactionManager createJPATransactionManager(EntityManagerFactory emf)
    {
        JpaTransactionManager jtManager = new JpaTransactionManager();
        jtManager.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
        jtManager.setEntityManagerFactory(emf);
        return jtManager;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean createEntityManagerFactoryBean(DataSource dataSource)
    {
        LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
        lcemfb.setDataSource(dataSource);
        lcemfb.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
        lcemfb.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        lcemfb.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
        return lcemfb;
    }

    @Bean
    public DataSource getDataSource()
    {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(databaseConfigurationProperties.getDriver());
        dataSource.setUrl(databaseConfigurationProperties.getUrl());
        dataSource.setUsername(databaseConfigurationProperties.getUser());
        dataSource.setPassword(databaseConfigurationProperties.getPassword());
        return dataSource;
    }
}

У меня есть DAO, который внедряет управление данными следующим образом:

@PersistenceContext(unitName = "persistenceUnit")
protected EntityManager entityManager;

Каким-то образом, когда я использую этот DAOв потоках данные управления данными не синхронизированы. В теме A я сохраняю сущность. После этого я пытаюсь прочитать его в потоке B, а его нет (даже если у меня есть поток в потоке A). Для обработки транзакций я использую аннотацию пружины @Transactional.

Как правильно получить пружину jpa с безопасностью гибкой нити? Я прочитал много уроков, но они все используют тот же код, что и я.

спасибо большое.

...