Когда соединения возвращаются в пул соединений с помощью менеджера сущностей Spring JPA (Hibernate)?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Когда соединения возвращаются в пул соединений с помощью менеджера сущностей Spring JPA (Hibernate)?

Сообщение Anonymous »

В моем процессе Java я подключаюсь к MySQL, используя следующую конфигурацию пружины: < /p>

@Configuration
@EnableTransactionManagement
@PropertySources({ @PropertySource("classpath:/myProperties1.properties"), @PropertySource("classpath:/myProperties2.properties") })
public class MyConfiguration {

@Autowired
protected Environment env;

/**
* @return EntityManagerFactory for use with Hibernate JPA provider
*/
@Bean(destroyMethod = "destroy")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setJpaVendorAdapter(jpaVendorAdapter());
em.setPersistenceUnitManager(persistenceUnitManager());

return em;
}

/**
*
* @return jpaVendorAdapter that works in conjunction with the
* persistence.xml
*/
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.valueOf(env.getProperty("jpa.database")));
vendorAdapter.setDatabasePlatform(env.getProperty("jpa.dialect"));
vendorAdapter.setGenerateDdl(env.getProperty("jpa.generateDdl", Boolean.class, false));
vendorAdapter.setShowSql(env.getProperty("jpa.showSql", Boolean.class, false));

return vendorAdapter;
}

@Bean
public PersistenceUnitManager persistenceUnitManager() {
DefaultPersistenceUnitManager pum = new DefaultPersistenceUnitManager();
pum.setPackagesToScan("com.app.dal");
pum.setDefaultPersistenceUnitName("my-pu");
pum.setPersistenceXmlLocations("classpath:/META-INF/persistence.xml");
pum.setDefaultDataSource(dataSource());

return pum;
}

@Bean(destroyMethod = "close")
public DataSource dataSource() {
Properties dsProps = new Properties();
dsProps.put("driverClassName", env.getProperty("hikari.driverClassName"));
dsProps.put("username", env.getProperty("hikari.username"));
dsProps.put("password", env.getProperty("hikari.password"));
dsProps.put("jdbcUrl", env.getProperty("hikari.source.data.jdbcUrl"));
dsProps.put("connectionTimeout", env.getProperty("hikari.connectionTimeout", Integer.class));
dsProps.put("idleTimeout", env.getProperty("hikari.idleTimeout", Integer.class));
dsProps.put("maxLifetime", env.getProperty("hikari.maxLifetime", Integer.class));
dsProps.put("maximumPoolSize", env.getProperty("hikari.maximumPoolSize.rtb.source", Integer.class));
dsProps.put("leakDetectionThreshold", env.getProperty("hikari.leakDetectionThreshold", Integer.class));
dsProps.put("jdbc4ConnectionTest", env.getProperty("hikari.jdbc4ConnectionTest", Boolean.class));

HikariConfig config = new HikariConfig(dsProps);
HikariDataSource ds = new HikariDataSource(config);

return ds;
}

@Bean(name = "sourceTxMgr")
public PlatformTransactionManager sourceDatatransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setPersistenceUnitName("my-pu");
transactionManager.setDataSource(dataSource());

return transactionManager;
}

@Bean
public PersistencyManager persistencyManager() {
return new JpaPersistencyManager();
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}

}
< /code>

intity-manager вводится в уровень доступа к данным контейнером: < /p>

@PersistenceContext(type = PersistenceContextType.TRANSACTION, unitName = "my-pu")
private EntityManager myEntityManager;
< /code>

и мои методы публичной бизнес-логики аннотированы с аннотацией @TransActionAl < /code>. удалось. Может ли кто -нибудь объяснить это мне или дать хорошую ссылку, которая может объяснить, когда именно соединения возвращаются в пул при использовании такой настройки? Не единственный компонент, необходимый для выполнения декларативной работы по управлению транзакциями. На самом деле необходимы три отдельных компонента: < /p>

Сам прокси -сервер EntityManager
Транзакционный аспект
менеджер транзакций
let's ware Over и посмотрите, как они взаимодействуют. < /P>

Аспект «Обегает», который общий аспект «Обегает». и после аннотированного бизнес -метода. Конкретный класс для реализации этого аспекта - это транзакция. />
В момент «после» аспект должен решить, должна ли транзакция быть совершена, откатана или остается влево. />
Диспетчер транзакций должен дать ответ на два вопроса: < /p>

Должен ли новый менеджер объектов? The transaction manager will decide based on:

the fact that one transaction is already ongoing or not
the propagation attribute of the transactional method (for example REQUIRES_NEW always starts a new transaction)
If the transaction manager decides to create a new transaction, then it will:

create a new entity manager
bind the entity manager С текущим потоком
Grave соединение из пула соединений DB
Привяжите соединение с текущим потоком
Manager и подключение и соединение связаны с текущим потоком, используя трентокальные переменные. Части программы, которые нуждаются в текущем менеджере объектов или подключении, могут извлечь их из потока. Один компонент программы, который делает именно то, что является доверенным лицом EntityManager.

Подробнее здесь: https://stackoverflow.com/questions/274 ... -hibernate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»