pentaho/pentaho-kettle · error · RuntimeException
The properties systems settings are already initialised!
Error message
The properties systems settings are already initialised!
What it means
Props.init(String filename) initializes Kettle's global properties from a specific file. It throws RuntimeException if Props was already initialized, protecting the process-wide singleton from being loaded twice with different files.
Solutions
- Choose one init path per JVM (either default init(int) or init(String)) and call it exactly once
- Check initialization state before calling; catch RuntimeException for idempotent behavior
- Pass the custom file via the supported configuration mechanism instead of a second init call
- If the custom file must win, ensure it is the only init call in the process bootstrap
Example fix
// before
Props.init(Props.TYPE_PROPERTIES_KETTLE);
Props.init("/custom/kettle.properties"); // throws
// after
Props.init("/custom/kettle.properties"); // single init only Defensive patterns
Strategy: try-catch
Validate before calling
public static synchronized void initPropsFromFile(String filename) {
try { Props.init(filename); } catch (RuntimeException already) { /* ignore */ }
} Try / catch
try {
Props.init("/custom/kettle.properties");
} catch (RuntimeException e) {
// Props already initialized elsewhere; proceed with existing instance
} Prevention
- Never mix init(int) and init(String) in the same JVM
- Decide the properties source at startup and configure it there
- Check initialization state or catch-and-ignore for idempotency
When it happens
Trigger: Calling Props.init(filename) after any prior Props.init(...) or after Props.getInstance() created the default instance — e.g. loading kettle.properties then attempting to load a custom properties file.
Common situations: Applications wanting a custom kettle.properties path but calling the default init first, test suites running multiple init calls, framework code initializing Props before application code does.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Properties, Kettle systems settings, not initialised!
- The Properties systems settings are already initialised!
- Central Log Store is not initialized!!!
- Error initializing JNDI
- Error invoking lifecycle listener
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e85d39f288fcbe1d.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/Props.java:197
} else {
throw new RuntimeException( "The Properties systems settings are already initialised!" );
}
}
/**
* Initialize the properties: load from disk.
*
* @param display
* The Display
* @param filename
* the filename to use
*/
public static final void init( String filename ) {
if ( props == null ) {
props = new Props( filename );
} else {
throw new RuntimeException( "The properties systems settings are already initialised!" );
}
}
/**
* Check to see whether the Kettle properties where loaded.
*
* @return true if the Kettle properties where loaded.
*/
public static boolean isInitialized() {
return props != null;
}
public static Props getInstance() {
if ( props != null ) {
return props;
}
throw new RuntimeException( "Properties, Kettle systems settings, not initialised!" );View on GitHub (pinned to f3058517a1)