class DefaultJobKeyGenerator implements JobKeyGenerator<JobParameters> {

	/**
	 * Generates the job key to be used based on the {@link JobParameters} instance
	 * provided.
	 */
	@Override
	public String generateKey(JobParameters source) {<FILL_FUNCTION_BODY>}

}


		Assert.notNull(source, "source must not be null");
		Map<String, JobParameter<?>> props = source.getParameters();
		StringBuilder stringBuffer = new StringBuilder();
		List<String> keys = new ArrayList<>(props.keySet());
		Collections.sort(keys);
		for (String key : keys) {
			JobParameter<?> jobParameter = props.get(key);
			if (jobParameter.isIdentifying()) {
				String value = jobParameter.toString();
				stringBuffer.append(key).append("=").append(value).append(";");
			}
		}
		return DigestUtils.md5DigestAsHex(stringBuffer.toString().getBytes(StandardCharsets.UTF_8));
	
<no_super_class>