Я пытаюсь использовать управление транзакциями JPA с пакетной вставкой с использованием Micronaut + Postgresql.
| Микронавт Версия: 1.1.3 | Версия JVM: 1.8.0_212
Я настроил проект Micronaut для использования 'micronaut-hibernate-jpa' в build.gradle.
compile "io.micronaut.configuration:micronaut-hibernate-jpa"
Подход высокого уровня подобен этому и отлично работает, когда источник данных определен в application.yml.
мой интерфейс
interface myrepository
{
savebatch (@NotNull List<ConsumerRecord<String, MyBusinessClass>> buffer
}
моя реализация интерфейса
@Slf4j
@Singleton
@EnableTransactionManagement
class myrepositoryimpl implements myrepository
{
@PersistenceContext
private EntityManager entityManager
myrepositoryimpl(@CurrentSession EntityManager entityManager){
this.entityManager = entityManager
}
@Override
@Transactional
public savebatch (...)
{
..some business logic
entity.persist(...)
....
entity.flush()
entity.clear()
}
}
Приведенный выше код работает нормально, если я использую источник данных из application.yml.
Мое требование : мое приложение требует создания источников данных во время выполнения. Поэтому я удалил dagtasource и другие детали из application.yml и создал их во время выполнения.
для подходов Dynami c. Я инициализирую EntityManger в конструкторе со следующим фрагментом кода, но выдает ошибку времени выполнения как ' Не настроен менеджер транзакций '
HibernatePersistenceProvider hibernatePersistenceProvider = new HibernatePersistenceProvider();
Map <String,Object> properties = new HashMap<String,Object>();
properties.put(org.hibernate.cfg.AvailableSettings.JPA_JDBC_DRIVER, 'org.postgresql.Driver')
properties.put(org.hibernate.cfg.AvailableSettings.JPA_JDBC_URL, 'jdbc:postgresql://...')
properties.put(org.hibernate.cfg.AvailableSettings.DIALECT, PostgreSQL10Dialect.class)
properties.put(org.hibernate.cfg.AvailableSettings.JPA_JDBC_USER, '...')
properties.put(org.hibernate.cfg.AvailableSettings.JPA_JDBC_PASSWORD, '...')
properties.put(org.hibernate.cfg.AvailableSettings.SHOW_SQL, false)
EntityManagerFactory entityManagerFactory = hibernatePersistenceProvider
.createContainerEntityManagerFactory(persistenceUnitInfo, properties);
def entityManager = entityManagerFactory.createEntityManager()
log.info "Setting entity manager factory "
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory((EntityManagerFactory)entityManagerFactory);
DataSource dataSource = DataSourceBuilder.create()
.driverClassName('org.postgresql.Driver')
.url('jdbc:postgresql://...')
.password('...')
.username('...')
.build()
if (dataSource!= null){
log.info "Valid datasource created"
txManager.setDataSource(dataSource);
}
context.registerSingleton(entityManager)
return entityManager
}
, перешел по нескольким ссылкам и Google .
https://guides.micronaut.io/micronaut-data-access-jpa-hibernate/guide/index.html
https://micronaut-projects.github.io/micronaut-data/latest/guide/#graalJPA
Как использовать EntityManager с Micronaut?