Dropwizard utility classes for data sizes, durations, enums, generics, resources, exceptions, JAR locations, and direct execution services.
—
Duration management capabilities for parsing and manipulating duration values with support for various time units and conversion to standard Java types.
The Duration class provides helper methods for parsing human-readable duration values into a thread-safe, immutable representation.
Create Duration instances for specific time units:
public static Duration nanoseconds(long count);
public static Duration microseconds(long count);
public static Duration milliseconds(long count);
public static Duration seconds(long count);
public static Duration minutes(long count);
public static Duration hours(long count);
public static Duration days(long count);Parameters:
count - The number of time unitsReturns: A new Duration instance representing the specified time period
Parse human-readable strings into Duration objects:
public static Duration parse(String duration);Parameters:
duration - String representation like "30 seconds", "5 minutes", "2 hours"Returns: A valid Duration representing the parsed input string
Supported Formats:
Supported Units:
ns, nanosecond, nanoseconds - Nanosecondsus, microsecond, microseconds - Microsecondsms, millisecond, milliseconds - Millisecondss, second, seconds - Secondsm, min, mins, minute, minutes - Minutesh, hour, hours - Hoursd, day, days - DaysThrows:
IllegalArgumentException - If the input cannot be parsed or contains invalid time unitsAccess duration properties:
public long getQuantity();
public TimeUnit getUnit();Convert to specific time units:
public long toNanoseconds();
public long toMicroseconds();
public long toMilliseconds();
public long toSeconds();
public long toMinutes();
public long toHours();
public long toDays();Convert to Java standard library Duration:
public java.time.Duration toJavaDuration();Standard object methods:
public boolean equals(Object obj);
public int hashCode();
public String toString();
public int compareTo(Duration other);// Create using factory methods
Duration fiveSeconds = Duration.seconds(5);
Duration tenMinutes = Duration.minutes(10);
Duration oneHour = Duration.hours(1);
Duration threedays = Duration.days(3);
// Get quantity and unit
long quantity = fiveSeconds.getQuantity(); // 5
TimeUnit unit = fiveSeconds.getUnit(); // TimeUnit.SECONDS// Parse various formats
Duration timeout = Duration.parse("30 seconds");
Duration interval = Duration.parse("5 minutes");
Duration delay = Duration.parse("2 hours");
Duration period = Duration.parse("1 day");
// Abbreviated forms
Duration shortTimeout = Duration.parse("30s");
Duration shortInterval = Duration.parse("5m");
Duration shortDelay = Duration.parse("2h");
Duration shortPeriod = Duration.parse("1d");
// Singular and plural forms
Duration oneSecond = Duration.parse("1 second");
Duration manySeconds = Duration.parse("30 seconds");
Duration oneMinute = Duration.parse("1 minute");
Duration manyMinutes = Duration.parse("10 minutes");
// Different cases work
Duration caseInsensitive = Duration.parse("30 SECONDS");Duration original = Duration.parse("2 hours");
// Convert to different units
long nanoseconds = original.toNanoseconds(); // 7,200,000,000,000
long microseconds = original.toMicroseconds(); // 7,200,000,000
long milliseconds = original.toMilliseconds(); // 7,200,000
long seconds = original.toSeconds(); // 7,200
long minutes = original.toMinutes(); // 120
long hours = original.toHours(); // 2
long days = original.toDays(); // 0 (truncated)// Convert to java.time.Duration for integration with modern Java APIs
Duration dropwizardDuration = Duration.parse("30 seconds");
java.time.Duration javaDuration = dropwizardDuration.toJavaDuration();
// Use with modern Java APIs
CompletableFuture.delayedExecutor(javaDuration.toMillis(), TimeUnit.MILLISECONDS);
// Convert back from java.time.Duration if needed
java.time.Duration javaTimeout = java.time.Duration.ofMinutes(5);
Duration dropwizardTimeout = Duration.milliseconds(javaTimeout.toMillis());Duration short = Duration.seconds(30);
Duration long = Duration.minutes(2);
// Comparison (compares based on nanosecond values)
int comparison = short.compareTo(long); // negative (30s < 2min)
// Equality (compares quantity and unit exactly)
Duration seconds30a = Duration.seconds(30);
Duration seconds30b = Duration.seconds(30);
boolean equal = seconds30a.equals(seconds30b); // true
// Note: Different units with same time value are NOT equal
Duration millis30000 = Duration.milliseconds(30000);
Duration seconds30 = Duration.seconds(30);
boolean equalTime = millis30000.equals(seconds30); // false (different units)
boolean equalComparison = millis30000.compareTo(seconds30) == 0; // true (same time value)Duration duration = Duration.minutes(5);
String str = duration.toString(); // "5 minutes"
Duration singleUnit = Duration.minutes(1);
String singleStr = singleUnit.toString(); // "1 minute" (singular)
Duration multipleUnits = Duration.hours(2);
String multipleStr = multipleUnits.toString(); // "2 hours" (plural)Common pattern for configuration timeouts and intervals:
// In configuration classes
public class DatabaseConfiguration {
private Duration connectionTimeout = Duration.seconds(30);
private Duration queryTimeout = Duration.minutes(5);
private Duration healthCheckInterval = Duration.seconds(10);
// Configuration parsing from YAML/properties
public void setConnectionTimeout(String timeout) {
this.connectionTimeout = Duration.parse(timeout);
}
// Usage in application code
public Connection getConnection() {
return dataSource.getConnection(connectionTimeout.toMilliseconds());
}
}// Use with thread operations
Duration sleepTime = Duration.parse("500ms");
Thread.sleep(sleepTime.toMilliseconds());
// Use with ScheduledExecutorService
Duration delay = Duration.parse("10 seconds");
Duration period = Duration.parse("1 minute");
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
task,
delay.toMilliseconds(),
period.toMilliseconds(),
TimeUnit.MILLISECONDS
);The parsing method throws IllegalArgumentException for invalid input:
try {
Duration.parse("invalid duration"); // Throws IllegalArgumentException
} catch (IllegalArgumentException e) {
// Handle parsing error
}
try {
Duration.parse("30 invalid-unit"); // Throws IllegalArgumentException (unknown unit)
} catch (IllegalArgumentException e) {
// Handle unknown unit error
}
try {
Duration.parse("not-a-number seconds"); // Throws IllegalArgumentException (invalid number)
} catch (IllegalArgumentException e) {
// Handle number parsing error
}The Duration class provides seamless integration with Java's modern time APIs:
// Convert to java.time.Duration for use with modern APIs
Duration dropwizardTimeout = Duration.parse("30 seconds");
java.time.Duration javaTimeout = dropwizardTimeout.toJavaDuration();
// Use with CompletableFuture
CompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> performOperation())
.orTimeout(javaTimeout.toMillis(), TimeUnit.MILLISECONDS);
// Use with reactive streams (if using reactive libraries)
Flux.interval(javaTimeout).subscribe(tick -> performPeriodicTask());Install with Tessl CLI
npx tessl i tessl/maven-io-dropwizard--dropwizard-util