Escritura de clases de herramienta de información de configuración de propiedades de lectura de Java

0 Prefacio

En el proyecto, alguna información de configuración generalmente se escribe en el archivo de configuración, lo cual es conveniente para modificar los parámetros y puede lograr el propósito de la automatización de procesos. Este artículo explica en detalle cómo la clase Propiedades lee la información del archivo de configuración.

1 objeto de propiedades java

(1) Hay una clase de propiedades más importante (java.util.Properties) en Java, que representa un conjunto persistente de propiedades detalladas. Las propiedades se pueden guardar en una ruta o cargar desde una ruta. Estos son los puntos principales sobre los atributos:

  • Cada clave y su valor correspondiente en la lista de atributos es una cadena.

  • Una lista de atributos puede contener otra lista de atributos como su "predeterminada", y el segundo atributo se puede buscar en la lista si no se encuentra una clave de atributo en la lista de atributos original.

  • Esta clase es segura para subprocesos; varios subprocesos pueden compartir un objeto Propiedades sin sincronización externa

(2) Los principales métodos de esta categoría son los siguientes:

 

 

(3) Se utiliza principalmente para leer archivos de configuración de Java y almacenar algunos datos de uso frecuente para que los programadores los modifiquen. El archivo de configuración es un archivo de texto con el sufijo (.properties),

El formato de contenido del archivo es "clave = valor", y el comentario de texto se puede anotar con "#". Como se muestra abajo:

(4) instancia de propiedades de Java

  •    Obtenga el objeto de flujo de entrada de la ruta de destino test.properites. El sufijo debe ser .properties
  •    Utilice el método load () de la clase Propiedades para obtener datos del flujo de entrada de bytes
  •   Utilice el método getProperty (clave de cadena) de la clase Propiedades para obtener el valor de acuerdo con la clave del parámetro

2 Compilación de herramientas

package testproperties;

import org.apache.hadoop.conf.Configuration;
import org.apache.log4j.Logger;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.net.URI;

public class PropertyFileReader {

    private static final Logger logger = Logger.getLogger(PropertyFileReader.class);
    private static Properties prop = new Properties();

    public static void main(String[] args) throws IOException {

        PropertyFileReader pfr = new PropertyFileReader();
        Properties pro = pfr.readLocalPropertyFile("test.properties");
        String url = pro.getProperty("url");
        System.out.println(url);
        

    }

//从本地读取
    public static Properties readLocalPropertyFile(String filename) throws IOException {

        if (prop.isEmpty()) {

            InputStream input = PropertyFileReader.class.getClassLoader().getResourceAsStream(filename);
            try {
                prop.load(input);
            } catch (IOException e) {
                logger.error(e);
                throw e;
            } finally {
                if (input != null) {
                    input.close();
                }

            }

        }
        return prop;
    }
//从HDFS读取
    public static Properties readHdfsPropertyFile(String defaultFS, String path) throws Exception {
        {
            if (prop.isEmpty()) {
                Configuration config = new Configuration();
                config.set("fs.defaultFS", defaultFS);
                FileSystem hdfs = FileSystem.get(new URI(defaultFS), config, "test");
                FSDataInputStream fs = hdfs.open(new Path(path));
                InputStream input = fs.getWrappedStream();
                try {
                    prop.load(input);
                } catch (IOException ex) {
                    logger.error(ex);
                    throw ex;
                } finally {
                    if (input != null) {
                        input.close();
                    }
                }
            }
            return prop;
        }
    }
}

Los resultados de la prueba son los siguientes:

Extensión : para que los scripts de shell lean archivos de configuración y archivos HDFS, es relativamente simple y se puede obtener directamente a través de la línea de comandos.

cat /home/centos/phm/JTTL_ETL_COMMON/oozieurl.txt | grep oozie_url | awk -F'=' '{ print $2 }' | sed s/[[:space:]]//g

Lea el archivo /home/centos/phm/JTTL_ETL_COMMON/oozieurl.txt y filtre la línea oozie_url, y tome la segunda columna separada por "=".

Nota: sed s / [[: space:]] // g debe usarse aquí para eliminar espacios adicionales para evitar errores causados ​​por el formateo.

Si desea leer el contenido en HDFS, reemplace el comando anterior con el comando hadoop, como por ejemplo:

hadoop fs -cat /home/centos/phm/JTTL_ETL_COMMON/oozieurl.txt | grep oozie_url | awk -F'=' '{ print $2 }' | sed s/[[:space:]]//g

3 resumen

Generalmente, en un entorno de producción en línea, tendemos a colocar algunos parámetros en un archivo de configuración o directorio compartido de clúster (como HDFS), que es conveniente para que los programadores modifiquen, y también es una implementación de un proceso automatizado. Este artículo explica cómo leer la información del archivo de configuración a través de la clase Propiedades. Uno es obtenerlo de un archivo de recursos local y el otro es obtenerlo de un directorio compartido HDFS.

Supongo que te gusta

Origin blog.csdn.net/godlovedaniel/article/details/114449144
Recomendado
Clasificación