Во время опроса соединения в c3p0 вы должны рассмотреть некоторые варианты.Они приведены ниже application.property
file:
db.driver: oracle.jdbc.driver.OracleDriver // for Oracle
db.username: YOUR_USER_NAME
db.password: YOUR_USER_PASSWORD
db.url: DATABASE_URL
minPoolSize:5 // number of minimum poolSize
maxPoolSize:100 // number of maximum poolSize
maxIdleTime:5 // In seconds. After that time it will realease the unused connection.
maxStatements:1000
maxStatementsPerConnection:100
maxIdleTimeExcessConnections:10000
Здесь maxIdleTime
- это основные моменты.Он определяет, сколько секунд это освободит неиспользуемое соединение.Это в секунду.
Другой это minPoolSize
.Он определяет, сколько соединений он будет удерживать в режиме ожидания.
Другое - maxPoolSize
.Он определяет максимальное количество соединений, которое он будет поддерживать в режиме загрузки.
Теперь, как вы настраиваете ComboPooledDataSource
?Вот код:
@Bean
public ComboPooledDataSource dataSource(){
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
dataSource.setDriverClass(env.getProperty("db.driver"));
dataSource.setJdbcUrl(env.getProperty("db.url"));
dataSource.setUser(env.getProperty("db.username"));
dataSource.setPassword(env.getProperty("db.password"));
dataSource.setMinPoolSize(Integer.parseInt(env.getProperty("minPoolSize")));
dataSource.setMaxPoolSize(Integer.parseInt(env.getProperty("maxPoolSize")));
dataSource.setMaxIdleTime(Integer.parseInt(env.getProperty("maxIdleTime")));
dataSource.setMaxStatements(Integer.parseInt(env.getProperty("maxStatements")));
dataSource.setMaxStatementsPerConnection(Integer.parseInt(env.getProperty("maxStatementsPerConnection")));
dataSource.setMaxIdleTimeExcessConnections(10000);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return dataSource;
}
Для подробностей реализации, пожалуйста, проверьте эту ветку .Здесь я добавил практическую реализацию
Редактировать (Получение соединения)
Вы можете получить соединение, используя следующий способ:
Session session = entityManager.unwrap(Session.class);
session.doWork(connection -> doSomeStuffWith(connection));
Как вы получаете EntityManager?
@PersistenceContext
private EntityManager entityManager;
Надеюсь, это поможет вам.
Спасибо:)