【发布时间】:2016-05-28 11:06:51
【问题描述】:
我是 Spring Boot 的新手,并且已经阅读了他们的文档以及几篇文章,并且很难为单个静态 HTML 页面提供服务。我认为让事情变得复杂的是,我有两个无法满足的要求,而且我认为这些文档或这些文章不能满足我的要求:
- 我想使用 YAML 进行外部配置(所以
application.yml);和 - 我实际上希望我的外部配置是 external!也就是说,我不希望它打包在我的 uberjar 中,而是希望它与 uberjar 一起部署,作为一个解耦的工件。这使我可以在部署了配置文件的任何环境中运行相同的 uberjar。
首先,我在我的编译类路径中添加了所有常用的 Starter POM(提到这一点,很明显 Snake YAML应该在我的类路径中):
compile(
'org.codehaus.groovy:groovy-all:2.4.6'
,'org.springframework.boot:spring-boot-starter-jetty'
,'org.springframework.boot:spring-boot-starter-actuator'
)
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: 'spring-boot-starter-tomcat'
}
接下来,我将src/main/resources/webapps/test.html 添加到我的源代码中:
<html>
<head>
<title>Test</title>
</head>
<body>
This is a simple test!
</body>
</html>
接下来,我将application.yml 添加到我的项目的根目录中:
spring:
resources:
static-locations:
- 'classpath:/webapps/'
这个想法是让 Spring Boot 在本地运行时在根目录中找到此文件,但 CI 服务器能够在 uberjar 旁边部署任意(特定于环境的)application.yml。
然后我构建我的 uberjar:
./gradlew build
现在我运行我的 uberjar,传入一个命令行参数,它应该告诉 Spring 在哪里找到我的配置文件:
java -Dspring.config.location=. -jar build/libs/myapp.jar
我指定“.”是因为 Gradle 用完了项目的根目录,这也是 application.yml 所在的位置。
应用程序启动得很好,当我转到http://localhost:8080 时,我看到了我通常看到的内容(我有一个@RestController 将/ 映射到一个简单的“Hello, Spring Boot”字符串)。 但是,当我转到 http://localhost:8080/test.html 时,我得到了 404。
有什么想法会出错吗?
【问题讨论】:
-
你能告诉你的控制器
/test映射到哪里吗? -
通常当你使用休息时你没有像localhost:8080/test.html这样的路径你只有localhost:8080/test。您的映射是如何配置的?你能提供“WebMvcAutoConfiguration”吗?
标签: spring spring-boot yaml