spring-mvc - ejemplo - mvc resources
Sirviendo recursos estáticos del sistema de archivos | Spring Boot Web (4)
La administración de la configuración Spring Boot permite múltiples estrategias aquí ( ver Boot reference documentation ).
Si bien el uso de una ruta estática y completa funciona aquí, le aconsejo que no use esa estrategia, ya que cada desarrollador de su equipo no compartirá el mismo diseño de espacio de trabajo.
Puede usar algunas de las estrategias elegidas en ese proyecto de ejemplo y hacer de esta ruta una propiedad de configuración.
Una vez que se trata de una propiedad, digamos resources.projectroot
, hay varias formas de configurar esto:
- cada desarrollador establece manualmente este valor en su archivo
application.yml
oapplication.properties
- utilice variables env al ejecutar el proyecto como
RESOURCES_PROJECTROOT=/home/user/demo/ ./gradlew bootRun
(aquí, gradle + unix) oset RESOURCES_PROJECTROOT=%cd%
mvn spring-boot:run
(aquí, maven + windows)
Probablemente encuentre muchas otras soluciones que se ajusten a sus necesidades al observar su herramienta de compilación, su sistema operativo de elección y todas las estrategias de configuración que Boot proporciona.
Uso de una aplicación web de Spring Boot para tratar de servir mi recurso estático desde una carpeta del sistema de archivos fuera de mi proyecto.
La estructura de la carpeta se ve así: -
src
main
java
resources
test
java
resources
pom.xml
ext-resources (I want to keep my static resources here)
test.js
Configuración de primavera: -
@SpringBootApplication
public class DemoStaticresourceApplication extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(DemoStaticresourceApplication.class, args);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/test/**").addResourceLocations("file:///./ext-resources/")
.setCachePeriod(0);
}
}
Al presionar '' http: // localhost: 9999 / test / test.js '' en mi navegador devuelve un 404.
¿Cómo debo configurar ResourceHandlerRegistry para que sirva recursos estáticos de la carpeta ''ext-resources'' mencionada anteriormente?
Debería poder activar / desactivar el caché para el entorno dev / prod.
Gracias
ACTUALIZACIÓN 1
Dando una ruta de archivo absoluta funciona:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/test/**")
.addResourceLocations(
"file:///C:/Sambhav/Installations/workspace/demo-staticresource/ext-resources/")
.setCachePeriod(0);
}
¿Cómo puedo proporcionar una ubicación relativa? La ruta absoluta hará que mi vida sea difícil durante el proceso de creación y despliegue.
file:///
es una URL absoluta que apunta a la raíz del sistema de archivos y, por lo tanto, file:///./ext-resources/
significa que Spring Boot está buscando recursos en un directorio llamado ext-resources
en la raíz.
Actualice su configuración para usar algo como file:ext-resources/
como la URL.
Esto es lo que hice en la clase WebConfig, dentro del método addResourceHandlers:
boolean devMode = this.env.acceptsProfiles("development");
String location;
if (devMode) {
String currentPath = new File(".").getAbsolutePath();
location = "file:///" + currentPath + "/client/src/";
} else {
location = "classpath:static/";
}
Spring Boot Maven Plugin puede agregar directorios adicionales a classpath. En tu caso, podrías incluir eso en tu pom.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<folders>
<folder>${project.build.directory}/../ext-resources</folder>
</folders>
...
</configuration>
</plugin>
De esta forma, no necesita incluir ningún código en sus clases. Simplemente inicie su aplicación web con
mvn spring-boot:run