在scala的开发过程中,经常会修改程序的参数,将这些参数放到配置文件中避免了重复编译,然而打包的过程,如果不做配置文件外置,将无法修改配置内容,还是需要重新打包

这里给出读取配置文件的三种方式

方式一:

这是最常见的读取配置文件方式

val postgprop = new Properties()
val ipstream: InputStream = this.getClass().getResourceAsStream("/config.properties")
postgprop.load(ipstream)

在程序的任何地方输入代码,就能使通过下面的方式获得key对应的value

postgprop.getProperty("key.name")

而配置文件的格式为

key.name=value

然而这种方式固定从src/main/resources获取配置文件,打包时一并放入jar包中,修改较为麻烦

方式二:

通过 System.getProperty("user.dir") 的方式获得当前路径的绝对路径,打成jar包运行时,一般就是java -jar或submit命令运行时的路径,后面加上配置文件的路径,如下

val filePath =System.getProperty("user.dir")//设定为jar包的绝对路径 在IDE中运行时为project的绝对路径
val postgprop = new Properties
val ipstream = new BufferedInputStream(new FileInputStream(filePath+"/conf/config.properties"))
postgprop.load(ipstream)

这样就能在jar包范围之外读取配置文件了,但是,System.getProperty("user.dir")的方式较为固定,只能获取当前路径

方式三:

作为对方式二的改良,只需将获取路径的方式改变即可

val directory = new File("..")
val filePath = directory.getAbsolutePath //设定为上级文件夹 获取绝对路径

“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹

这样就能灵活的设置路径,而不像方式二,config的路径必须是执行命令路径

总结:

总的来说,提供了三种循序渐进的读取配置文件的方式,其中方式二和方式三均能在jar包范围之外读取配置文件,避免了重复编译,打包的过程

而方式一只能使用相对路径,配置文件固定在src/main/resources中

特别注意:

特别要注意的是,在处理log4j的配置文件log4j.properties时有一些不同

val directory = new File("..")
val filePath = directory.getAbsolutePath //设定为上级文件夹 获取绝对路径
PropertyConfigurator.configure(filePath + "/conf/log4j.properties")

filePath的设置可以自己选用后两种方式的哪一种,但是一定要是绝对路径

scala读取jar包外配置文件的方式的更多相关文章

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

    前言 相信很多人遇到过这个问题:本地运行的好好的程序,怎么部署到线上就报找不到配置呢? 初识getResource 案例一 FieldMapConfig.class.getResource(" ...

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

    http://jrails.iteye.com/blog/1705464 ***************************************' 一般在项目中使用properties配置文件 ...

  3. Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件

    1.1      在eclipse中配置maven命令 Mvn -e clean package -Ptest -DskipTests=true 1.1.1    执行命令之后得到jar 1.2    ...

  4. jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法

    jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法 用系统属性System.getProperty("user.dir")获得执行命令的目录(网上 ...

  5. java jar包与配置文件的写法

    一个普通的java project,里面引用了config.properties配置文件,将项目打成Runnable jar,然后将config.properties放到打包后的jar路径下,执行该j ...

  6. springboot项目实现jar包外配置文件管理

    背景 为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式. ...

  7. application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用

    一.简介 spring boot项目application.properties文件存放及使用介绍 二.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会 ...

  8. Jar中的Java程序如何读取Jar包中的资源文件

    Jar中的Java程序如何读取Jar包中的资源文件 比如项目的组织结构如下(以idea中的项目为例): |-ProjectName |-.idea/  //这个目录是idea中项目的属性文件夹 |-s ...

  9. Spring环境搭建之:导入jar包、配置文件名称及放置位置

    Spring环境搭建之:导入jar包.配置文件名称及放置位置 现在项目开发中spring框架应用的还是比较多的,自己用的还不太熟练,每次用的时候总配置半天,总有些配置弄错,就找个时间总结以下,方便以后 ...

随机推荐

  1. C++标准库之queue(各函数及其使用全)

    原创作品,转载请注明出处:http://www.cnblogs.com/shrimp-can/p/5283520.html 一.FIFO队列,即先入先出队列 1.队列的声明 std::deque< ...

  2. Android控件状态依赖框架

    在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入(EditText)和多个操作(MotionEvent和KeyEvent),且操作依赖于输入的状态.如下图所示的场景: 设定图 ...

  3. MySQL1236错误的恢复

    从库出现问题 mysql> show slave status\G; *************************** . row *************************** ...

  4. pyqt样式表语法笔记(中)

    pyqt样式表语法笔记(中) pyqt QSS python 样式表 一.弹窗 在日常的各种桌面软件的使用中,我们都会碰到弹窗.例如注册,登录的时候,会有相应的信息弹窗,这里就以信息收集弹窗为例进行弹 ...

  5. React中使用CSSTransitionGroup插件实现轮播图

    动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...

  6. ECMAScript版本号总结

      最近想要研究下ES6,关于这个标准的发展历史.ES5. ES6.ES2015等等名称的定义都不怎么明确,查了很多资料,去除了程序员不关心的信息,下面是对ECMAScript规范发展历史及名词定义的 ...

  7. for语句输出三角形

    public class yuju { public static void main(String[] args) { ; i<; i++) { ; j<=i;j++) { System ...

  8. 小练习,判断X的奇偶性

    package lianxi1; public class text { public static void main(String[] args) { ; ==) { System.out.pri ...

  9. 第三方登录 ----QQ登录

    学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博文分享!

  10. 使用SevenZipSharp压缩/解压7z格式

    7z格式采用的LZMA算法,号称具有现今最高压缩率.笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压.不得不说,SevenZipSharp的API设计得非常 ...