如果失败,Scala会从磁盘和资源加载文件

时间:2014-08-13 17:06:43

标签: io

我是Scala的新手,使用Scala和Akka开发RESTful API,需要从XML文件中读取绑定配置,该文件包含以下部分。

<appconfig>
   <bindproperties>
     <host>localhost</host>
     <port value="7777"/>
   </bindproperties>
</appconfig>

我想先从磁盘验证并读取该文件(如果存在)并加载它。如果它不存在,那么我想从默认的资源路径加载。目前,我的工作如下:

val stream = getClass.getResourceAsStream("/config/PreferencesServiceConfiguration.xml")
val appSettings = scala.xml.XML.load(stream)

def bindHost : String = { (appSettings \ "bindproperties" \ "host").text.toString }
def bindPort : Int = {    (appSettings \ "bindproperties" \ "port" \ "@value").toString.toInt  }

但是这总是从嵌入JAR文件的资源文件读取,而不是从磁盘读取。

任何人都可以指导我如何做到这一点?我想要逻辑流程如下:

  • 如果classpath / config文件夹中存在xml文件
    • 将XML文件加载为AppSettings
  • 否则

    • 将默认资源XML文件(作为资源嵌入JAR中)加载为AppSettings
  • 从AppSettings中读取属性

1 个答案:

答案 0 :(得分:0)

作为更好的选择,请使用Config(com.typesafe.Config)加载配置。您可以将默认配置作为reference.conf。您提到的所有设置都可以放入此配置文件中。

但是,如果您想从磁盘加载XML文件。我建议,在运行时在标准位置(包括部署目录或部署目录的相对路径)进行配置检查。如果此检查失败,您可以回退到嵌入式资源。

再次将Config评分高于此值,因为如果未提供外部配置,您可以定义回退。