我有一个Spring Boot应用程序,当我从Intellij作为maven配置运行时,它可以正常运行。
我有一个使用属性文件定义的环境项目结构。
Todolist.select('todolists.id, todolists.title, count(todoitems.todolist_id) as total').left_joins(:todoitems).group("todolists.id")
等
我们的框架以我们选择带有VM参数的env的方式工作。
例如resources/conf/dev/environment.properties
resources/conf/qa/environment.properties
resources/conf/general.properties
或-Denv=dev
将App打包到可执行JAR并尝试运行它之后,Spring Boot无法识别项目-Denv=qa
路径下的属性文件。
当我查看JAR时,属性文件位于conf
。
错误是:
{jar-name}.jar\BOOT-INF\classes\conf
java.io.FileNotFoundException: conf\general.properties (The system cannot find the path specified)
我尝试使用此处的文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 但似乎没有什么能解决它。 还尝试使用本指南 - http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#executable-jar-launching但也失败了......
指南将属性文件称为“外部”,但我的属性打包在JAR中。
答案 0 :(得分:0)
尝试将属性文件放在资源中。 不在资源/ conf。 它运作良好。
答案 1 :(得分:0)
我发现了什么是错的。
我们加载资源的内部框架正在使用 async def cmd_number(self, channel, player):
"""
Usage:
{command_prefix}number
Displays a random number (useless but fuck it)
"""
cards = ['1','2','3','4']
hand = await self.send_message(channel, ' '.join(cards))
await asyncio.sleep(0.6)
for x in range(4):
shuffle(cards)
await self.safe_edit_message(hand, ' '.join(cards))
await asyncio.sleep(0.6)
来读取资源的路径。
现在由于某种原因,使用maven spring boot插件创建jar时,类路径是使用' /'例如File.separator
(资源在jar内部的类路径中)
当我们试图运行jar时,它试图用' \'来读取资源。所以构建的路径是(如果我们选择" dev"例如)/C:/Users/MyUser/Projects/MyApp/target/MyApp-1.0.1.jar!/BOOT-INF/classes!/
conf \ dev ,这就是应用无法加载的原因。
我仍然不知道为什么会这样。