Java 使用Spring MVC和Boot刷新静态内容
我正在评估SpringMVC&Boot和AngularJs用于构建web应用程序。我遇到了这样一个问题:当我修改静态内容(html、js、css)时,每次都必须重新启动应用程序。我希望有办法解决这个问题,因为重新启动整个应用程序进行静态内容更改是没有效率的。我尝试过的所有其他web应用程序框架都允许动态更新静态内容文件(即使只是SpringMVC和普通的WAR应用程序)Java 使用Spring MVC和Boot刷新静态内容,java,spring-mvc,spring-boot,Java,Spring Mvc,Spring Boot,我正在评估SpringMVC&Boot和AngularJs用于构建web应用程序。我遇到了这样一个问题:当我修改静态内容(html、js、css)时,每次都必须重新启动应用程序。我希望有办法解决这个问题,因为重新启动整个应用程序进行静态内容更改是没有效率的。我尝试过的所有其他web应用程序框架都允许动态更新静态内容文件(即使只是SpringMVC和普通的WAR应用程序) 我已经根据《使用Spring引导执行器构建RESTful Web服务》指南()设置了我的项目。基本上,它使用Spring引导和
我已经根据《使用Spring引导执行器构建RESTful Web服务》指南()设置了我的项目。基本上,它使用Spring引导和MVC控制器来创建REST服务。此外,我还使用了“使用AngularJS消费RESTful Web服务”指南()来构建AngularJS前端。它创建一个网页,显示来自REST服务的响应。我所做的唯一更改是对我的应用程序而不是“”进行请求。我的静态内容存储在“src/main/resources/public”文件夹中。除了不重新加载静态内容外,此设置正常工作。啊。。。我也遇到了这个问题 不要将静态内容放在classpath
src/main/resources/public
文件夹中,而是将它们放在src/main/webapp
中,就像其他Java web应用一样。嵌入式Tomcat将在它们更改时自动重新加载它们
如注释中所述,默认配置将不包括src\main\webapp
中的资源。要解决此问题,只需将以下内容添加到pom.xml
节点:
<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>
maven资源插件
2.6
复制资源
验证
复制资源
${basedir}/target/classes/static
src/main/webapp
真的
通过使用resources插件,您可以通过运行可执行JAR进行本地开发:
java-jar target/.jar
在运行时,您可以使用chromedev工具或任何您喜欢的IDE来修改文件,而无需重新启动。但是,无论何时运行构建,生成的包都将包含
src\main\webapp
中src\main\resources\static
中的所有文件,文档中说“所有现代IDE都允许重新加载静态资源,通常还允许热交换Java类更改”()。这是真的。Eclipse在默认情况下或多或少会这样做,我不是IntelliJ用户,但据我所知,您也可以将其配置为自动生成。我和一位同事也遇到了这个问题。我们在…中找到了答案
在主菜单上,选择Run |重新加载更改的类
对于eclipse,您必须激活Project->“自动构建”选项作为最低配置。我最后使用的是。browsersync和grunt监视磁盘上的静态资源,并在编辑文件时更新浏览器。它充当一种代理。通过这种方式,您可以立即看到UI中的更改,而无需构建或重新启动任何内容 Grunt、browsersync、spring boot和angularjs是为您配置的,如果您使用我用来设置我的项目的
尽管这需要更多的工具,而不仅仅是一个IDE,而且要复杂得多,所以我不建议每个项目都使用它。我也遇到过同样的问题,这里提出的解决方案似乎是合乎逻辑的,对我来说是可行的 在布雷夫: 1-ctrl+shift+A 2-搜索注册表 3-在打开的对话框中搜索“compiler.automake.allow.when.app.running” 检查一下
对原始问题的回顾 我遇到了这样一个问题:当我修改静态内容(html、js、css)时,每次都必须重新启动应用程序 我也遇到了同样的问题,最后通过添加
<configuration>
<addResources>true</addResources>
</configuration>
真的
到pom.xml
我被这个SpringBootDevTools的事情弄糊涂了,但它对我所做的一切都没有影响
我的静态内容存储在“src/main/resources/public”文件夹中
你的道路很好。src/main/resources/static也很好。我的解决方案(用Kotlin编写,但非常明显):
主要思想是您可以有条件地添加自己的资源处理程序。例如,如果设置了某些系统属性(resources.local.path),则使用属性中的值添加资源位置。然后在开发中使用一些合理的值设置此属性,如'-Dresources.local.path=file:/Users/andrey/Projects/gsp test/src/main/resources/static/'
不要忘记尾部斜杠。spring boot devtools是而不是编辑的静态htm/js的“热部署”解决方案 我在intellij中配置了一个web方面,这样当我使用它编辑resources/static中的html/js文件时,intellij就会知道将更新的文件复制到./target,并且我在中启动的spring boot应用程序会自动显示该内容 看
@eigil METIOND
addResources
maven构建的配置。我在gradle版本中使用了spring boot gradle插件
,我发现了这个
,以及Spring Boot文档。只需将此指令添加到build.gradle并运行gradle task
bootRun
,资源文件在保存时立即刷新。仅供参考。Java版@viator的答案:
@Configuration
class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/dist/*.js").addResourceLocations(
"file:src/main/typescript/dist/"
);
}
}
我使用的是1.5.8.0版本 它会立即更新我的更改,特别是静态文件或jsp文件 如果您使用的是Maven。您需要将其添加到pom.xml中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
这里有完整的示例和更多详细信息您只需再添加一个依赖项即可 你是格拉德尔 在您的Pom.xml中
org.springfram
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
mvn clean spring-boot:run
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.3.0.RELEASE'
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
spring.resources.static-locations=file:///C:/myspringbootapp/src/main/webapp
tasks.bootRun {
sourceResources(sourceSets.getAt(SourceSet.MAIN_SOURCE_SET_NAME))
}
<addResources>true</addResources>
</configuration>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>