package com.vladmihalcea.flexypool.config;
import com.vladmihalcea.flexypool.FlexyPoolDataSource;
import com.vladmihalcea.flexypool.adaptor.PoolAdapterFactory;
import com.vladmihalcea.flexypool.strategy.IncrementPoolOnTimeoutConnectionAcquiringStrategy;
import com.vladmihalcea.flexypool.strategy.RetryConnectionAcquiringStrategy;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
import java.util.UUID;
/**
* AbstractFlexyDataSourceConfiguration - Abstract Configuration for flexypool data source
*
* @author Vlad Mihalcea
*/
public abstract class AbstractFlexyDataSourceConfiguration<T extends DataSource> {
public abstract T getPoolingDataSource();
public abstract Configuration configuration();
public int getMaxOverflowPoolSize() {
return 5;
}
public int getRetryAttempts() {
return 2;
}
protected Configuration configuration(PoolAdapterFactory<T> poolAdapter) {
return new Configuration.Builder<T>(
UUID.randomUUID().toString(),
getPoolingDataSource(),
poolAdapter
).build();
}
@Bean(initMethod = "start", destroyMethod = "stop")
public FlexyPoolDataSource dataSource() {
Configuration configuration = configuration();
return new FlexyPoolDataSource(configuration,
new IncrementPoolOnTimeoutConnectionAcquiringStrategy.Factory(getMaxOverflowPoolSize()),
new RetryConnectionAcquiringStrategy.Factory(getRetryAttempts())
);
}
}