ich einmal auf dem gleichen Problem gestolpert, als ich flexy-pool (a reactive connection pool sizing utility) entwickle, so schrieb ich an article sowohl mit einem Java-basierten und ein XML-basiertes Beispiel.
Grundsätzlich aus den folgenden Builder starten:
public final class Configuration<T extends DataSource> extends ConfigurationProperties<T, Metrics, PoolAdapter<T>> {
public static final long DEFAULT_METRIC_LOG_REPORTER_PERIOD = 5;
public static class Builder<T extends DataSource> {
private final String uniqueName;
private final T targetDataSource;
private final PoolAdapterBuilder<T> poolAdapterBuilder;
private final MetricsBuilder metricsBuilder;
private boolean jmxEnabled = true;
private long metricLogReporterPeriod = DEFAULT_METRIC_LOG_REPORTER_PERIOD;
public Builder(String uniqueName, T targetDataSource, MetricsBuilder metricsBuilder, PoolAdapterBuilder<T> poolAdapterBuilder) {
this.uniqueName = uniqueName;
this.targetDataSource = targetDataSource;
this.metricsBuilder = metricsBuilder;
this.poolAdapterBuilder = poolAdapterBuilder;
}
public Builder setJmxEnabled(boolean enableJmx) {
this.jmxEnabled = enableJmx;
return this;
}
public Builder setMetricLogReporterPeriod(long metricLogReporterPeriod) {
this.metricLogReporterPeriod = metricLogReporterPeriod;
return this;
}
public Configuration<T> build() {
Configuration<T> configuration = new Configuration<T>(uniqueName, targetDataSource);
configuration.setJmxEnabled(jmxEnabled);
configuration.setMetricLogReporterPeriod(metricLogReporterPeriod);
configuration.metrics = metricsBuilder.build(configuration);
configuration.poolAdapter = poolAdapterBuilder.build(configuration);
return configuration;
}
}
private final T targetDataSource;
private Metrics metrics;
private PoolAdapter poolAdapter;
private Configuration(String uniqueName, T targetDataSource) {
super(uniqueName);
this.targetDataSource = targetDataSource;
}
public T getTargetDataSource() {
return targetDataSource;
}
public Metrics getMetrics() {
return metrics;
}
public PoolAdapter<T> getPoolAdapter() {
return poolAdapter;
}
}
die Java-basierte Konfiguration zu verwenden ist straight-forward:
@org.springframework.context.annotation.Configuration
public class FlexyDataSourceConfiguration {
@Bean
public Configuration configuration() {
return new Configuration.Builder(
UUID.randomUUID().toString(),
poolingDataSource,
CodahaleMetrics.BUILDER,
BitronixPoolAdapter.BUILDER
).build();
}
}
Sie können aber auch als auch XML-basierte Konfiguration verwenden:
Lesen Sie Ihren Artikel. Ich mochte diesen Weg und fand ihn einzigartig. Könnten Sie mir helfen, das Konstrukt der letzten beiden Konstruktor-Arg zu verstehen? Ich konnte keine Hilfe finden, weil das BUILDER-Konstrukt dort verwendet wurde. – rajneesh2k10
Es ist ein Builder, der andere Builders verwendet, um einige Abhängigkeiten aufzulösen. –
Oh ... Also der "BUILDER" ist die Eigenschaft von "CodohaleMetrics" und "BitronixPoolAdapter" wenn nicht falsch. – rajneesh2k10