使用Spring MVC和Boot刷新静态内容
我正在评估Spring MVC&Boot和AngularJs构建Web应用程序。 我遇到了问题,当我修改我的静态内容(html,js,css)时,我不得不每次重新启动应用程序。 我希望有一个解决方法,因为重新启动整个应用程序的静态内容变化效率不高。 我试过的每个其他Web应用程序框架允许更新静态内容文件(即使只是Spring MVC和普通的旧WAR应用程序)。
我已经从“使用Spring Boot Actuator构建REST风格的Web服务”指南( http://spring.io/guides/gs/actuator-service/ )安装我的项目。 基本上它使用Spring Boot和MVC控制器来创建一个REST服务。 另外,我使用了“使用AngularJS使用REST风格的Web服务”( http://spring.io/guides/gs/consuming-rest-angularjs/ )来构建AngularJS的前端。 它创建一个显示REST服务响应的网页。 我做的唯一的改变是请求是由我的应用程序而不是“ http://rest-service.guides.spring.io/greeting ”。 我的静态内容存储在“src / main / resources / public”文件夹中。 除非不重新加载静态内容,否则此设置可以正常工作。
该文档说“所有现代的IDE允许重新加载静态资源,并通常也热切换Java类的变化”( http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto -hotswapping )。 这是真的。 Eclipse默认情况下或多或少,我不是一个IntelliJ用户,但从我所了解的你可以配置它自动生成。
啊…我也遇到过这个问题。
把你的静态内容放在classpath src/main/resources/public
文件夹中,把它们放到src/main/webapp
,就像你用其他的Java web应用程序一样。 嵌入式的Tomcat会随着它们的改变自动重新加载它们。
正如评论中提到的那样,默认配置将不包含src\main\webapp
的资源。 为了解决这个问题,你可以把下面的代码添加到你的pom.xml <build>
节点中:
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/classes/static</outputDirectory> <resources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
通过使用资源插件,您可以通过运行可执行JAR来进行本地开发:
java -jar target / .jar
在运行时,您可以使用Chrome开发工具或任何您喜欢的IDE来修改文件,而无需重新启动。 但是,无论何时运行构建,生成的包都将在src\main\resources\static
下包含src\main\webapp
下的所有文件。
原始问题的回顾
我遇到了问题,当我修改我的静态内容(html,js,css)时,我必须每次重新启动应用程序
我有同样的问题,并最终通过添加解决
<configuration> <addResources>true</addResources> </configuration>
到pom.xml
中的spring-boot-maven-plugin
,我被这个spring-boot-devtools的东西搞糊涂了,但是对我做的事情没有任何影响。
我的静态内容存储在“src / main / resources / public”文件夹中。
你的路很好。 src / main / resources / static也很好。
同事和我也遇到了这个问题。 我们在IntelliJ文档中找到了答案
在主菜单上,选择运行| 重新加载更改的类
我的解决方案(写在Kotlin中,但很明显):
@Controller class WebController : WebMvcConfigurerAdapter() { override fun addResourceHandlers(registry: ResourceHandlerRegistry) { System.getProperty("resources.local.path")?.let { registry.addResourceHandler("/**").addResourceLocations(it) } } ... }
主要思想是可以有条件地添加自己的资源处理程序。 例如,如果设置了一些系统属性( resources.local.path ),则使用属性中的值添加资源位置。 然后你在开发中设置这个属性,如“-Dresources.local.path = file:/ Users / andrey / Projects / gsp-test / src / main / resources / static /”。
不要忘记尾随斜线。
我有同样的问题,在这里提出的解决方案似乎是合乎逻辑的,并为我工作breif:1- Ctrl + Shift + A 2-搜索注册表3-在打开的对话框中搜索“compiler.automake.allow.when.app。运行“并检查它http://garywaddell.com/2015/11/20/spring-boot-intellij-idea-not-reloading-static-content/
对于eclipse,你必须激活项目 – >“自动构建”选项作为最低配置。
我最终使用的是带有grunt的Browsersync 。 浏览器同步和grunt监视磁盘上的静态资源,并在编辑文件时更新浏览器。 它作为一种代理。 这样,您可以立即看到UI中的更改,无需构建或重新启动任何内容。
Grunt,browsersync,spring引导和angularjs为您配置,如果您使用JHipster ,我用来设置我的项目。
当然,这需要比IDE更多的工具,而且要复杂得多,所以我不会为每个项目推荐这个。
spring-boot-devtools 不是解决热编译静态htm / js的问题
我在intellij里面配置了一个web facet,这样当我用它来编辑resources / static里面的html / js文件时,intellij知道把更新后的文件拷贝到./target里面,而且我在里面启动的spring启动应用程序会自动显示内容
请参阅https://www.jetbrains.com/help/idea/2016.2/configuring-static-content-resources.html
@eigil为maven构建提供了addResources
配置。 我在gradle build中使用了spring-boot-gradle-plugin
,并且发现了这个Spring Boot github问题 ,Spring Boot doc也提到了这个选项 。 只要添加这个指令build.gradle并运行Gradle任务bootRun
,然后资源文件保存时立即刷新。 仅供参考。
@viator的Java版本的答案是:
@Configuration class WebMvcConfigurer extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/dist/*.js").addResourceLocations( "file:./src/main/typescript/dist/" ); } }
- 将thymeleaf版本2.14迁移到3.0不能找到消息属性
- 如何禁用RepositoryRestHandlerMapping和EndpointHandlerMapping?
- Spring MVC控制器PathVariables上的Java bean验证
- Spring MVC – 如何绑定布尔变量中的HTML复选框值
- Spring Boot .mustache文件扩展名
- 异常处理程序不能使用`spring-boot-starter-data-rest`
- Spring MVC错误404错误的请求Kotlin
- 使用@ExceptionHandler处理spring安全认证异常
- 测试Spring的@Async void返回方法