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 PropertySource
s. Su opción más simple es la siguiente:
Definir un ApplicationContextInitializer
y 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:
-
Esto no funcionará fuera del espacio de trabajo local, ya que depende de la estructura del código fuente.
-
He asumido una estructura de proyecto Gradle aquí
/build/classes/main
. Si es necesario, ajuste de acuerdo con su herramienta de construcción. -
Si
MyApplicationContextInitializer
está en elsrc/test/java
,pwd
estarán
no/build/classes/test/
./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.