Eclipselink Pooling相当于C3PO
我试图阻止这种日志记录
从服务器成功收到的最后一个数据包是10,255毫秒。 成功发送到服务器的最后一个数据包是0毫秒前。
我已经在persistence.xml中使用auto reconnect设置了连接url
我想要的是会有一个连接池,每分钟或每小时检查连接,以便连接仍然存在。 Hibernate具有c3po的这个function。 喜欢ff。
1800 5 50 50 50 5 5 1 true select 1; true C3P0
无论如何,我可以在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来确定我可以使用eclipselink来使用bonecp数据源(c3p0应该类似)。 像这样的东西:
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; } }
如果你想将c3p0与eclipselink一起使用,也许你只需要在buildDataSource方法中使用本页中提到的代码( http://www.mchange.com/projects/c3p0/#using_combopooleddatasource )。
一些有用的链接:
- 如何创建自定义SessionCustomizer: http ://wiki.eclipse.org/Customizing_the_EclipseLink_Application_(ELUG)#Using_the_Session_Customizer_Class
- 关于如何配置Eclipselink以使用c3p0的建议: http : //www.eclipse.org/forums/index.php/t/172073/
关于:警告:databaseLogin.getPassword()已加密;
您可以使用以下内容:
Map
问候!!