【问题标题】:Akka ConfigException$WrongType: myconf has type STRING rather than OBJECTAkka ConfigException$WrongType:myconf 的类型为 STRING 而不是 OBJECT
【发布时间】:2017-08-10 11:28:20
【问题描述】:

我正在尝试读取 Akka 中的外部配置/属性文件。 我指的是post

我只有一个配置需要在 myappConfiguration.properties 中添加更多属性。我可以看到属性文件能够加载但无法读取配置。

myappConfiguration.properties 内容如下。

myconf {
    directory : "D:\\Git\\Java_Test_WS\\file.reader\\"
}

我收到以下异常,异常清楚地说明了一些类型问题,但我不明白我应该写什么。

Exception in thread "main" com.typesafe.config.ConfigException$WrongType: myappConfiguration.properties: myconf has type STRING rather than OBJECT
    at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:145)
    at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:172)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:184)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:189)
    at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:258)
    at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:264)
    at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:37)
    at com.myapp.file.reader.AkkaBaseEventReader.main(AkkaBaseEventReader.java:27)

下面是我试图读取该配置条目的 Java 代码。我在第 27 行遇到异常,代码如下:

Config config = system.settings().config().getConfig("myconf.directory");

完整代码:

public class AkkaBaseEventReader implements ApplicationConstant {

    public static void main(String[] args) throws IOException {

        System.setProperty("config.file","myappConfiguration.properties");

        ActorSystem system = ActorSystemImpl.create("FileReaderForassignment");
        final ActorRef reader = system.actorOf(EventScannerActor.props(),"FileReader");

        System.out.println(system.settings());

        Config config = system.settings().config().getConfig("myconf.directory");       

    }
}

下面是我的 pom.xml,它将显示我正在使用的 Akka 版本:

<properties>
        <akka.version>2.4.9</akka.version>
        <maven-dependency-plugin.version>3.0.0</maven-dependency-plugin.version>
        <maven.compiler.plugin>3.6.1</maven.compiler.plugin>
        <java.compiler.target>1.8</java.compiler.target>
        <java.compiler.source>1.8</java.compiler.source>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-actor_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-http-core_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-http-experimental_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-http-jackson-experimental_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>${maven-dependency-plugin.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- This will download source so easy to see API and java doc. -->
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Java 8 compiler plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin}</version>
                <configuration>
                    <source>${java.compiler.source}</source>
                    <target>${java.compiler.target}</target>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

提前感谢您提供任何帮助和信息。

【问题讨论】:

    标签: java akka configuration-files application-settings


    【解决方案1】:

    根据您的配置,目录的值是 String 而不是另一个 Config 对象:

    myconf {
      directory : "D:\\Git\\Java_Test_WS\\file.reader\\" 
    }
    

    要获得String 的值,您应该这样做:

    Config config = system.settings().config().getString("myconf.directory");
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,原因是在 Java 参数中设置属性时使用了错误的配额。

      我的错误 Java 参数

      -Dlocal=true
      

      我的代码

          Config config = ConfigFactory.load(Thread.currentThread().getContextClassLoader());
          config = config.getConfig("local"); //exception thrown here
      

      抛出的异常是

      Caused by: com.typesafe.config.ConfigException$WrongType: system properties: local has type STRING rather than OBJECT
      at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:133)
      at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)
      at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
      

      解决方案是使用单一配额

      -Dlocal='true'
      

      这发生在“com.typesafe.config”版本:1.2.1

      <groupId>com.typesafe</groupId>
      <artifactId>config</artifactId>
      <version>1.2.1</version>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-10
        • 2012-06-27
        • 2022-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        相关资源
        最近更新 更多