Saltar al contenido

Especificando la ruta relativa en application.properties en Spring

Este artículo ha sido aprobado por nuestros especialistas así se asegura la veracidad de nuestro contenido.

Solución:

Estoy usando Spring Boot para crear una muestra de carga y encuentro el mismo problema, solo quiero obtener la ruta raíz del proyecto. (por ejemplo, /sring-boot-upload)

Descubrí que el siguiente código funciona:

upload.dir.location=$user.dir\uploadFolder

La respuesta de @membersound es simplemente dividir la ruta codificada en 2 partes, sin resolver dinámicamente la propiedad. Puedo decirte cómo lograr lo que estás buscando, pero debes entender que hay NOproject.basedir cuando está ejecutando la aplicación como un jar o war. Fuera del espacio de trabajo local, la estructura del código fuente no existe.

Si aún desea hacer esto para probar, eso es factible y lo que necesita es manipular el PropertySources. Su opción más simple es la siguiente:

Definir un ApplicationContextInitializery establezca la propiedad allí. Algo como lo siguiente:

    public class MyApplicationContextInitializer implements ApplicationContextInitializer 
    @Override
    public void initialize(ConfigurableApplicationContext appCtx) 
        try 
            // should be //build/classes/main/
            File pwd = new File(getClass().getResource("/").toURI());
            String projectDir = pwd.getParentFile().getParentFile().getParent();
            String conf = new File(projectDir, "db/init").getAbsolutePath();
            Map props = new HashMap<>();
            props.put("spring.datasource.url", conf);
            MapPropertySource mapPropertySource = new MapPropertySource("db-props", props);
            appCtx.getEnvironment().getPropertySources().addFirst(mapPropertySource);
         catch (URISyntaxException e) 
            throw new RuntimeException(e);
        
    

Parece que estás usando Boot, así que solo puedes declarar context.initializer.classes=com.example.MyApplicationContextInitializer en tus application.properties y Boot ejecutará esta clase al inicio.

Palabras de precaución otra vez:

  1. Esto no funcionará fuera del espacio de trabajo local, ya que depende de la estructura del código fuente.

  2. He asumido una estructura de proyecto Gradle aquí /build/classes/main. Si es necesario, ajuste de acuerdo con su herramienta de construcción.

  3. Si MyApplicationContextInitializer está en el src/test/java, pwd estarán /build/classes/test/no /build/classes/main/.

Si te ha sido de utilidad nuestro post, sería de mucha ayuda si lo compartieras con el resto entusiastas de la programación y nos ayudes a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *