Spring Boot Jar执行内部属性文件

时间:2017-07-11 09:46:25

标签: java maven spring-boot executable-jar properties-file

我有一个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中。

2 个答案:

答案 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 ,这就是应用无法加载的原因。

我仍然不知道为什么会这样。