1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.pool2.impl;
18
19 import java.time.Duration;
20
21 /**
22 * This class is used by pool implementations to pass configuration information
23 * to {@link EvictionPolicy} instances. The {@link EvictionPolicy} may also have
24 * its own specific configuration attributes.
25 * <p>
26 * This class is immutable and thread-safe.
27 * </p>
28 *
29 * @since 2.0
30 */
31 public class EvictionConfig {
32
33 private static final Duration MAX_DURATION = Duration.ofMillis(Long.MAX_VALUE);
34 private final Duration idleEvictDuration;
35 private final Duration idleSoftEvictDuration;
36 private final int minIdle;
37
38 /**
39 * Creates a new eviction configuration with the specified parameters.
40 * Instances are immutable.
41 *
42 * @param idleEvictDuration Expected to be provided by
43 * {@link BaseGenericObjectPool#getMinEvictableIdleDuration()}
44 * @param idleSoftEvictDuration Expected to be provided by
45 * {@link BaseGenericObjectPool#getSoftMinEvictableIdleDuration()}
46 * @param minIdle Expected to be provided by
47 * {@link GenericObjectPool#getMinIdle()} or
48 * {@link GenericKeyedObjectPool#getMinIdlePerKey()}
49 * @since 2.10.0
50 */
51 public EvictionConfig(final Duration idleEvictDuration, final Duration idleSoftEvictDuration, final int minIdle) {
52 this.idleEvictDuration = PoolImplUtils.isPositive(idleEvictDuration) ? idleEvictDuration : MAX_DURATION;
53 this.idleSoftEvictDuration = PoolImplUtils.isPositive(idleSoftEvictDuration) ? idleSoftEvictDuration : MAX_DURATION;
54 this.minIdle = minIdle;
55 }
56
57 /**
58 * Creates a new eviction configuration with the specified parameters.
59 * Instances are immutable.
60 *
61 * @param poolIdleEvictMillis Expected to be provided by
62 * {@link BaseGenericObjectPool#getMinEvictableIdleDuration()}
63 * @param poolIdleSoftEvictMillis Expected to be provided by
64 * {@link BaseGenericObjectPool#getSoftMinEvictableIdleDuration()}
65 * @param minIdle Expected to be provided by
66 * {@link GenericObjectPool#getMinIdle()} or
67 * {@link GenericKeyedObjectPool#getMinIdlePerKey()}
68 * @deprecated Use {@link #EvictionConfig(Duration, Duration, int)}.
69 */
70 @Deprecated
71 public EvictionConfig(final long poolIdleEvictMillis, final long poolIdleSoftEvictMillis, final int minIdle) {
72 this(Duration.ofMillis(poolIdleEvictMillis), Duration.ofMillis(poolIdleSoftEvictMillis), minIdle);
73 }
74
75 /**
76 * Gets the {@code idleEvictTime} for this eviction configuration
77 * instance.
78 * <p>
79 * How the evictor behaves based on this value will be determined by the
80 * configured {@link EvictionPolicy}.
81 * </p>
82 *
83 * @return The {@code idleEvictTime}.
84 * @since 2.11.0
85 */
86 public Duration getIdleEvictDuration() {
87 return idleEvictDuration;
88 }
89
90 /**
91 * Gets the {@code idleEvictTime} for this eviction configuration
92 * instance.
93 * <p>
94 * How the evictor behaves based on this value will be determined by the
95 * configured {@link EvictionPolicy}.
96 * </p>
97 *
98 * @return The {@code idleEvictTime} in milliseconds
99 * @deprecated Use {@link #getIdleEvictDuration()}.
100 */
101 @Deprecated
102 public long getIdleEvictTime() {
103 return idleEvictDuration.toMillis();
104 }
105
106 /**
107 * Gets the {@code idleEvictTime} for this eviction configuration
108 * instance.
109 * <p>
110 * How the evictor behaves based on this value will be determined by the
111 * configured {@link EvictionPolicy}.
112 * </p>
113 *
114 * @return The {@code idleEvictTime}.
115 * @since 2.10.0
116 * @deprecated Use {@link #getIdleEvictDuration()}.
117 */
118 @Deprecated
119 public Duration getIdleEvictTimeDuration() {
120 return idleEvictDuration;
121 }
122
123 /**
124 * Gets the {@code idleSoftEvictTime} for this eviction configuration
125 * instance.
126 * <p>
127 * How the evictor behaves based on this value will be determined by the
128 * configured {@link EvictionPolicy}.
129 * </p>
130 *
131 * @return The (@code idleSoftEvictTime} in milliseconds
132 * @since 2.11.0
133 */
134 public Duration getIdleSoftEvictDuration() {
135 return idleSoftEvictDuration;
136 }
137
138 /**
139 * Gets the {@code idleSoftEvictTime} for this eviction configuration
140 * instance.
141 * <p>
142 * How the evictor behaves based on this value will be determined by the
143 * configured {@link EvictionPolicy}.
144 * </p>
145 *
146 * @return The (@code idleSoftEvictTime} in milliseconds
147 * @deprecated Use {@link #getIdleSoftEvictDuration()}.
148 */
149 @Deprecated
150 public long getIdleSoftEvictTime() {
151 return idleSoftEvictDuration.toMillis();
152 }
153
154 /**
155 * Gets the {@code idleSoftEvictTime} for this eviction configuration
156 * instance.
157 * <p>
158 * How the evictor behaves based on this value will be determined by the
159 * configured {@link EvictionPolicy}.
160 * </p>
161 *
162 * @return The (@code idleSoftEvictTime} in milliseconds
163 * @deprecated Use {@link #getIdleSoftEvictDuration()}.
164 */
165 @Deprecated
166 public Duration getIdleSoftEvictTimeDuration() {
167 return idleSoftEvictDuration;
168 }
169
170 /**
171 * Gets the {@code minIdle} for this eviction configuration instance.
172 * <p>
173 * How the evictor behaves based on this value will be determined by the
174 * configured {@link EvictionPolicy}.
175 * </p>
176 *
177 * @return The {@code minIdle}
178 */
179 public int getMinIdle() {
180 return minIdle;
181 }
182
183 /**
184 * @since 2.4
185 */
186 @Override
187 public String toString() {
188 final StringBuilder builder = new StringBuilder();
189 builder.append("EvictionConfig [idleEvictDuration=");
190 builder.append(idleEvictDuration);
191 builder.append(", idleSoftEvictDuration=");
192 builder.append(idleSoftEvictDuration);
193 builder.append(", minIdle=");
194 builder.append(minIdle);
195 builder.append("]");
196 return builder.toString();
197 }
198 }