如何从地图中读取复杂的弹簧配置?

时间:2017-03-30 12:35:10

标签: java spring spring-boot configuration

我有以下属性application.properties文件:

mapper.url1=C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java.exe
mapper.url2=C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\javaw.exe

以及bean,java代码中的反射:

@Component
@EnableConfigurationProperties
@ConfigurationProperties
public class ApplicationProperties {
    private Map<String, String> mapper;
    //get and set methods
    ....

现在我想扩展这种格式并为密钥添加超时。

我希望最可读(我不坚持,你可以建议另一种)格式是:

mapper.url1=C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java.exe
mapper.url1.timeOut=1000

如何扩展我的配置以读取此(或其他具有相同功率)格式?

验证它的正确位置在哪里? 我想验证属性文件格式。每个密钥都应包含:path和timeout。否则不应该启动应用程序

1 个答案:

答案 0 :(得分:0)

使用嵌套类来表示属性。

例如:

@ConfigurationProperties
public class DemoApplication {

    ...

    public static class UrlProperties {
        // use Path or File so it's type-safe
        private Path path;

        // use int for type-safety 
        private int timeout;

        public Path getPath() {
            return path;
        }

        public void setPath(final Path path) {
            this.path = path;
        }

        public int getTimeout() {
            return timeout;
        }

        public void setTimeout(final int timeout) {
            this.timeout = timeout;
        }

        @Override
        public String toString() {
            return "UrlProperties{" + "path=" + path + ", timeout=" + timeout + '}';
        }
    }
}

然后使用Map键和值作为嵌套类类型定义String实例变量:

private Map<String, UrlProperties> mapper;

并使用以下属性:

mapper.url1.path=C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java.exe
mapper.url1.timeout=1000

mapper.url2.path=C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\javaw.exe
mapper.url2.timeout=5000

你最终得到的内容如下:

{url2=UrlProperties{path=C:\Program Files\Java\jdk1.8.0_111\bin\javaw.exe, timeout=5000}, url1=UrlProperties{path=C:\Program Files\Java\jdk1.8.0_111\bin\java.exe, timeout=1000}}

此外,使用Spring Boot 1.5,您可以使用JSR-303注释来验证您的ConfigurationProperties。有关详细信息,请参阅here