/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.dolphinscheduler.common.utils; import static org.apache.dolphinscheduler.common.Constants.COMMON_PROPERTIES_PATH; import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.enums.ResUploadType; import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * property utils * single instance */ public class PropertyUtils { /** * logger */ private static final Logger logger = LoggerFactory.getLogger(PropertyUtils.class); private static final Properties properties = new Properties(); private PropertyUtils() { throw new UnsupportedOperationException("Construct PropertyUtils"); } static { String[] propertyFiles = new String[]{COMMON_PROPERTIES_PATH}; for (String fileName : propertyFiles) { InputStream fis = null; try { fis = PropertyUtils.class.getResourceAsStream(fileName); properties.load(fis); } catch (IOException e) { logger.error(e.getMessage(), e); if (fis != null) { IOUtils.closeQuietly(fis); } System.exit(1); } finally { IOUtils.closeQuietly(fis); } } } /** * @return judge whether resource upload startup */ public static Boolean getResUploadStartupState() { String resUploadStartupType = PropertyUtils.getUpperCaseString(Constants.RESOURCE_STORAGE_TYPE); ResUploadType resUploadType = ResUploadType.valueOf(resUploadStartupType); return resUploadType == ResUploadType.HDFS || resUploadType == ResUploadType.S3; } /** * get property value * * @param key property name * @return property value */ public static String getString(String key) { return properties.getProperty(key.trim()); } /** * get property value with upper case * * @param key property name * @return property value with upper case */ public static String getUpperCaseString(String key) { return properties.getProperty(key.trim()).toUpperCase(); } /** * get property value * * @param key property name * @param defaultVal default value * @return property value */ public static String getString(String key, String defaultVal) { String val = properties.getProperty(key.trim()); return val == null ? defaultVal : val; } /** * get property value * * @param key property name * @return get property int value , if key == null, then return -1 */ public static int getInt(String key) { return getInt(key, -1); } /** * @param key key * @param defaultValue default value * @return property value */ public static int getInt(String key, int defaultValue) { String value = getString(key); if (value == null) { return defaultValue; } try { return Integer.parseInt(value); } catch (NumberFormatException e) { logger.info(e.getMessage(), e); } return defaultValue; } /** * get property value * * @param key property name * @return property value */ public static boolean getBoolean(String key) { String value = properties.getProperty(key.trim()); if (null != value) { return Boolean.parseBoolean(value); } return false; } /** * get property value * * @param key property name * @param defaultValue default value * @return property value */ public static Boolean getBoolean(String key, boolean defaultValue) { String value = properties.getProperty(key.trim()); if (null != value) { return Boolean.parseBoolean(value); } return defaultValue; } /** * get property long value * * @param key key * @param defaultVal default value * @return property value */ public static long getLong(String key, long defaultVal) { String val = getString(key); return val == null ? defaultVal : Long.parseLong(val); } /** * @param key key * @return property value */ public static long getLong(String key) { return getLong(key, -1); } /** * @param key key * @param defaultVal default value * @return property value */ public double getDouble(String key, double defaultVal) { String val = getString(key); return val == null ? defaultVal : Double.parseDouble(val); } /** * get array * * @param key property name * @param splitStr separator * @return property value through array */ public static String[] getArray(String key, String splitStr) { String value = getString(key); if (value == null) { return new String[0]; } try { String[] propertyArray = value.split(splitStr); return propertyArray; } catch (NumberFormatException e) { logger.info(e.getMessage(), e); } return new String[0]; } /** * @param key key * @param type type * @param defaultValue default value * @param T * @return get enum value */ public > T getEnum(String key, Class type, T defaultValue) { String val = getString(key); return val == null ? defaultValue : Enum.valueOf(type, val); } /** * get all properties with specified prefix, like: fs. * * @param prefix prefix to search * @return all properties with specified prefix */ public static Map getPrefixedProperties(String prefix) { Map matchedProperties = new HashMap<>(); for (String propName : properties.stringPropertyNames()) { if (propName.startsWith(prefix)) { matchedProperties.put(propName, properties.getProperty(propName)); } } return matchedProperties; } /** * */ public static void setValue(String key, String value) { properties.setProperty(key, value); } }