gpt4 book ai didi

java - Eclipselink Pooling 相当于 C3PO

转载 作者:行者123 更新时间:2023-11-30 04:18:11 27 4
gpt4 key购买 nike

我正在尝试阻止此日志记录

The last packet successfully received from the server was 10,255 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

我已经在 persistence.xml 中设置了自动重新连接的连接 URL

我想要的是有一个连接池,每分钟或每小时检查一次连接,以便连接仍然处于 Activity 状态。 Hibernate 通过 c3po 具有此功能。就像 ff 一样。

  <property name="hibernate.c3p0.timeout">1800</property> <!-- seconds -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.timeout">50</property>

<property name="hibernate.c3p0.numHelperThreads">5</property>
<property name="hibernate.c3p0.maxAdministrativeTaskTime">5</property>
<property name="statementCacheNumDeferredCloseThreads">1</property>

<property name="hibernate.c3p0.validate">true</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
<property name="hibernate.c3p0.testConnectionOnCheckout">true</property>

<property name="hibernate.c3p0.automaticTestTable">C3P0</property>

我可以在 eclipselink 中执行此操作吗?

最佳答案

2014 年 11 月 18 日更新:

我发现我原来提供的答案有一些问题!检索到的密码是通过 eclipselink 加密的,因此我们无法直接使用它。我们可以在这里硬编码我们的密码,但这可能不太好。我发现更好的方法是在创建实体管理器工厂时传递自定义 DataSource 对象。

additionalProperties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, dataSource);
emf = Persistence.createEntityManagerFactory(persistUnit, additionalProperties);

请参阅此处的示例代码:https://github.com/jiakuan/wise-persist/blob/master/src/main/java/org/wisepersist/EntityManagerFactoryProvider.java

原始答案:

我遇到了同样的问题,我刚刚发现我可以通过创建自定义SessionCustomizer将boncp数据源(c3p0应该类似)与eclipselink一起使用。像这样的事情:

public class JpaSessionCustomizer implements SessionCustomizer {

private static final Logger log = LoggerFactory.getLogger(JpaSessionCustomizer.class);

@Override
public void customize(Session session) throws Exception {
DatabaseLogin databaseLogin = session.getLogin();

String jdbcDriver = databaseLogin.getDriverClassName();
String jdbcUrl = databaseLogin.getDatabaseURL();
String username = databaseLogin.getUserName();
// WARNING: databaseLogin.getPassword() is encrypted,
// which cannot be used directly here
String password = "please use hard-coded password here";
log.debug("jdbcDriver={}, jdbcUrl={}, username={}, password={}",
jdbcDriver, jdbcUrl, username, password);

BoneCPDataSource dataSource = buildDataSource(jdbcDriver, jdbcUrl, username, password);
databaseLogin.setConnector(new JNDIConnector(dataSource));
}

private BoneCPDataSource buildDataSource(String jdbcDriver,
String jdbcUrl,
String username,
String password) {
BoneCPDataSource dataSource = new BoneCPDataSource();
dataSource.setDriverClass(jdbcDriver); // Loads the JDBC driver
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);

dataSource.setConnectionTimeout(15, TimeUnit.SECONDS);
dataSource.setAcquireRetryAttempts(10);

dataSource.setConnectionTestStatement("SELECT 1");
dataSource.setIdleConnectionTestPeriodInSeconds(30);

dataSource.setPartitionCount(2);
dataSource.setMinConnectionsPerPartition(5);
dataSource.setMaxConnectionsPerPartition(10);

dataSource.setDisableConnectionTracking(true);
return dataSource;
}
}

如果您想在 eclipselink 中使用 c3p0,也许您只需要在 buildDataSource 方法中使用本页中提到的代码 ( http://www.mchange.com/projects/c3p0/#using_combopooleddatasource )。

一些有用的链接:

关于java - Eclipselink Pooling 相当于 C3PO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com