我是Spring Boot的新手,已经阅读了他们的文档以及几篇文章,并且很难为单个静态HTML页面提供服务。我认为这里的复杂问题是,我有两个要求,我无法理解,而且我不认为文档或这些文章符合我的要求:
application.yml
);和首先,我在编译类路径中添加了所有常用的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,传入一个命令行arg,它应该告诉Spring where 找到我的配置文件:
java -Dspring.config.location=. -jar build/libs/myapp.jar
我指定&#34; .
&#34;因为Gradle用完了项目的根目录,也就是application.yml
所在的目录。
应用程序启动很好,当我转到http://localhost:8080
时,我会看到我通常看到的内容(我有一个@RestController
将/
映射到一个简单的&#34 ;你好,Spring Boot&#34; string)。 但是,当我转到http://localhost:8080/test.html
时,我得到了404。
我出错的任何想法?
答案 0 :(得分:3)
Spring引导自动配置会自动将src/main/resources
文件夹添加为静态资源根目录。这意味着其中的所有文件夹都会自动获取 - 您无需显式添加webapps
文件夹。
我刚刚将test.html
置于/main/resources/lestatic/
文件夹中进行了本地尝试:http://localhost:8080/test.html
无需额外配置即可正常运行,classpath:/lestatic/
被指定为资源时失败配置。
如果这不起作用,您应该检查构建工具是否确实将resources
文件夹作为资源根目录包含在内。完成构建后,您可以通过检查target/classes
文件夹中是否存在自定义文件夹来验证。
答案 1 :(得分:1)
PS。 @RestController也将继续工作。
答案 2 :(得分:0)
gradle build
java -Dspring.profiles.active=local -jar build/libs/stackoverflow-q37498214.jar
或强>
java -Dspring.profiles.active=production -jar build/libs/stackoverflow-q37498214.jar
Spring Boot通过$ {SPRING_PROFILES_ACTIVE}环境变量支持特定于环境的配置。
如果您设置此= 本地 ,然后提供名为 application-local.yml 的配置文件,则您的Spring Boot应用程序将利用该特定于环境的配置。
您也可以通过命令行设置:
java -Dspring.profiles.active=local -jar build/libs/app.jar
查看上面的示例应用程序并查看它的实际效果。
您的自定义配置路径( -Dspring.config.location =。)似乎未被选中。因此,您的自定义静态位置( classpath:/ webapps / )无法注册,因此您的网络服务器无法提供服务。
如果上述解决方案对您不起作用,那么我会要求您发布一个完整的示例项目,以便我们深入了解一下。此外,您的构建过程的详细信息,以及您提供生产配置文件的方式/时间。