package com.vladmihalcea.flexypool.config; import com.atomikos.jdbc.AbstractDataSourceBean; import com.atomikos.jdbc.AtomikosDataSourceBean; import com.vladmihalcea.flexypool.FlexyPoolDataSource; import com.vladmihalcea.flexypool.adaptor.AtomikosPoolAdapter; import com.vladmihalcea.flexypool.connection.JdkConnectionProxyFactory; import com.vladmihalcea.flexypool.metric.codahale.CodahaleMetrics; import com.vladmihalcea.flexypool.strategy.IncrementPoolOnTimeoutConnectionAcquiringStrategy; import com.vladmihalcea.flexypool.strategy.RetryConnectionAcquiringStrategy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import java.util.concurrent.TimeUnit; /** * FlexyDataSourceConfiguration - Configuration for flexypool data source * * @author Vlad Mihalcea */ @org.springframework.context.annotation.Configuration public class FlexyPoolConfiguration { @Autowired private AbstractDataSourceBean poolingDataSource; @Value("${flexy.pool.uniqueId}") private String uniqueId; @Bean public Configuration<AbstractDataSourceBean> configuration() { return new Configuration.Builder<AbstractDataSourceBean>( uniqueId, poolingDataSource, AtomikosPoolAdapter.FACTORY ) .setJmxEnabled(true) .setMetricLogReporterMillis(TimeUnit.SECONDS.toMillis(5)) .build(); } @Bean(initMethod = "start", destroyMethod = "stop") public FlexyPoolDataSource dataSource() { Configuration<AbstractDataSourceBean> configuration = configuration(); return new FlexyPoolDataSource<AbstractDataSourceBean>(configuration, new IncrementPoolOnTimeoutConnectionAcquiringStrategy.Factory(5), new RetryConnectionAcquiringStrategy.Factory(2) ); } }