Spring 加载项目外部配置文件
程序员文章站
2022-04-14 18:55:56
背景 在项目的部署过程中,一般是打成 war 或者 jar 包,这样一般存在两种问题: 1. 即使是配置文件修改,也还需要整个项目重新打包和部署。 2. 整个项目只有一套环境,不能切换。 针对上面的问题,可以使用外部化配置来解决。 需求 由于服务器上的应用服务器存放路径未知,只知应用服务器的目录结构 ......
背景
在项目的部署过程中,一般是打成 war 或者 jar 包,这样一般存在两种问题:
- 即使是配置文件修改,也还需要整个项目重新打包和部署。
- 整个项目只有一套环境,不能切换。
针对上面的问题,可以使用外部化配置来解决。
需求
由于服务器上的应用服务器存放路径未知,只知应用服务器的目录结构。所以需要通过文件的相对路径,实现外部化配置。
环境
- jdk6
- spring 3.2.5
方案
file
不建议使用 file 的相对路径来获取,因为以下两点:
- file 的相对目录会随着启动的目录变化而变化。
- file 不能够获取 jar 包中的配置文件。
class
可以使用 getclass().getresource
或者 getclass().getresourceasstream
来获取,可以获取到 jar 包中的文件。
- 如果文件路径以“/”开头,表示获取classpath路径下的文件。
- 不以“/”开头,获取和当前类同一目录下的文件。
classloader
classloader 和 class 类似,区别是 classloader 以“/”开头返回null,并且相对路径是获取 classpath 下的文件。
实现
最终选择使用 classloader 来实现较为简单,部分实现。
inputstream is = getclass().getclassloader().getresourceasstream(external_config_file); if (is == null) { logger.info("外部配置不存在。"); } try { encodedresource resource = new encodedresource(new inputstreamresource(is), "utf-8"); resourcepropertysource propertysource = new resourcepropertysource(resource); //外部化配置的优先级最高 beanfactory.getbean(standardenvironment.class).getpropertysources().addfirst(propertysource); } catch (ioexception e) { logger.error("获取外部配置失败。", e); }
上一篇: C#调用带结构体指针Dll的方法
推荐阅读
-
Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤
-
Spring Boot常见外部配置文件方式详析
-
WinForm加载外部类库项目的集成开发模式
-
使用Spring PropertyPlaceholderConfigurer加载的配置文件加密
-
Spring框架中引入外部配置文件的属性值
-
解决Maven项目加载spring bean的配置xml文件会提示找不到问题
-
搭建 Spring Cloud 项目 配置文件出现 defaultZone 无法解析时,是因为
-
关于logback.xml加载外部配置文件问题
-
Spring Boot打jar包后配置文件的外部优化配置方法
-
Spring Boot 把配置文件和日志文件放到jar外部