Akka ConfigException $ WrongType:myconf的类型为STRING而不是OBJECT

时间:2017-03-19 02:48:23

标签: java akka configuration-files application-settings

我正在尝试读取Akka中的外部conf / property文件。 我指的是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>

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

我遇到了类似的问题,原因是在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>