如何读取jar包外的properties文件和log4j.properties

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取jar包外的properties文件和log4j.properties相关的知识,希望对你有一定的参考价值。

一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生...
一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生成在jar包中,这样的话要修改配置文件又要重新打jar包,那是相当的麻烦。
既然这么麻烦,你肯定想将配置文件放在其他的目录下,生成的jar包内不包含相应的配置文件,修改配置文件无需重新打包,没错,下面就是一种解决方案了。
读取jar包内配置文件:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");
读取jar包外配置文件:

String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties";
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
另外,如果app中使用到log4j.properties文件,默认的存放路径是src/log4j.properties,同上面一样,我想把log4j.properties放在其他目录中,这样一来,在修改log4j配置文件的时候无需重新打jar包。
在main函数第一行添加如下代码:
PropertyConfigurator.configure(System.getProperty("user.dir") + "/conf/log4j.properties");
参考技术A �0�2既然这么麻烦,你肯定想将配置文件放在其他的目录下,生成的jar包内不包含相应的配置文件,修改配置文件无需重新打包,没错,下面就是一种解决方案了。�0�2读取jar包内配置文件:InputStream�0�2in�0�2=�0�2this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");�0�2读取jar包外配置文件:String�0�2filePath�0�2=�0�2System.getProperty("user.dir")�0�2+�0�2"/conf/configfilename.properties";�0�2�0�2 �0�2InputStream�0�2in�0�2=�0�2new�0�2BufferedInputStream(new�0�2FileInputStream(filePath));�0�2�0�2�0�2另外,如果app中使用到log4j.properties文件,默认的存放路径是src/log4j.properties,同上面一样,我想把log4j.properties放在其他目录中,这样一来,在修改log4j配置文件的时候无需重新打jar包。本回答被提问者采纳

从包外的文件夹访问 jinja2 模板

【中文标题】从包外的文件夹访问 jinja2 模板【英文标题】:Access jinja2 templates from a folder outside of package 【发布时间】:2021-11-02 11:16:53 【问题描述】:

我正在尝试使用 Wea​​syprint 和 Jinja2 生成 pdf 格式的账单 我有以下文件架构:

项目 |脚本 || pdf_builder.py |模板 || bill_template.html || bill_style.css

但是无论我尝试什么,我都会收到以下错误: jinja2.exceptions.TemplateNotFound: ../templates/bill_template.html

我对 pdf_builder.py 的相关代码是:

from weasyprint import HTML
from jinja2 import Environment, FileSystemLoader

file_html = "../templates/bill_template.html"

# loading the jinja2 environment
env = Environment(loader=FileSystemLoader('../templates'))

# Render and build
template = env.get_template(file_html)
html_out = template.render()
HTML(string=html_out).write_pdf(pdf_name, stylesheets=[file_css])

真的不可能使用 jinja 从当前文件夹之外的文件夹访问模板吗?还是我把路径都弄错了?提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

找到了……

对于 jinja,您需要在 FileSystemLoader 中指定模板文件夹所在的位置,然后从中给出模板文件的相对路径。

但是对于 css(你给 Weasyprint,你必须指定工作目录的相对路径。这给出了:

file_html = f"document_type_template.html"
file_css = f"templates/document_type_style.css"

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template(file_html)
html_out = template.render(template_vars)
HTML(string=html_out).write_pdf(pdf_name, stylesheets=[file_css])

【讨论】:

以上是关于如何读取jar包外的properties文件和log4j.properties的主要内容,如果未能解决你的问题,请参考以下文章

如何读取jar包外的properties文件和log4j.properties

springboot的jar包内的配置文件与jar包外配置文件的加载顺序

怎么从外部读取jar包中的资源文件

Spring Boot如何读取jar外的属性文件

如何读取Jar包里面的文件

拒绝FileNotFoundException!总结了这几个读取jar包外配置文件的知识点