在何处以及如何定义应用程序属性? - JHIpster

时间:2015-07-20 23:16:56

标签: jhipster

在Spring Boot中,可以在application.properties文件中定义应用程序属性。例如,Rest的前缀可以定义为

spring.data.rest.basePath=api

对于基于Spring Boot的JHipster,我想应用程序属性可以在application.yml文件中定义。但是以下方法都不适用于我:404错误。

spring.data.rest.basePath: api

spring:
    data:
        rest:
            basePath: api

另一种可能性是配置本身不起作用。

4 个答案:

答案 0 :(得分:5)

我有同样的问题,最后想出来了!

来自Jhipster网站的报道:

  

您生成的应用程序也可以拥有自己的Spring Boot属性。强烈建议这样做,因为它允许应用程序的类型安全配置,以及IDE中的自动完成和文档。

     

JHipster已经在配置包中生成了一个ApplicationProperties类,该类已经预配置,并且已经在application.yml,application-dev.yml和application-prod.yml文件的底部记录。您需要做的就是编写自己的特定属性。

就我而言,我在applicaiton-prod.yml中设置了属性

application:
    redis:
        host: vnode1
        pool:
            max-active: 8
            max-idle: 8
            max-wait: -1
            min-idle: 0
        port: 6379

在ApplicationProperties类中:

@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
public class ApplicationProperties {

    public final Redis redis = new Redis();

    public Redis getRedis() {
        return redis;
    }

    public static class Redis {

        private String host = "127.0.0.1";

        private int port = 0;

        public String getHost() {
            return host;
        }

        public void setHost(String host) {
            this.host = host;
        }

        public int getPort() {
            return port;
        }

        public void setPort(int port) {
            this.port = port;
        }

        private Pool pool = new Pool();

        public void setPool(Pool pool) {
            this.pool = pool;
        }

        public Pool getPool() {
            return this.pool;
        }

        public static class Pool {
            private int maxActive = 8;
            private int maxWait = -1;

            public int getMaxIdle() {
                return maxIdle;
            }

            public void setMaxIdle(int maxIdle) {
                this.maxIdle = maxIdle;
            }

            private int maxIdle = 8;
            private int minIdle = 0;


            public void setMaxActive(int maxActive) {
                this.maxActive = maxActive;
            }

            public int getMaxActive() {
                return maxActive;
            }

            public int getMinIdle() {
                return minIdle;
            }

            public void setMinIdle(int minIdle) {
                this.minIdle = minIdle;
            }

            public int getMaxWait() {
                return maxWait;
            }

            public void setMaxWait(int maxWait) {
                this.maxWait = maxWait;
            }
        }

    }
}

然后我用它作为:

private final ApplicationProperties.Redis redis;
public RedisConfiguration(ApplicationProperties applicationProperties){
    redis = applicationProperties.getRedis();
}

例如,使用max-waithost

this.redis.getPool().getMaxWait();
this.redis.getHost();

希望它有所帮助。

答案 1 :(得分:0)

application.yml应为白色空格而非标签。

试试这样:

spring:
    data:
        rest:
            basePath: api

在我的应用程序中,文件位于路径中:

src\main\resources\config\application.yml

答案 2 :(得分:0)

尝试了数十次后,我终于想出了解决方法。也许对某人有用。

要为控制器使用前缀(例如jh),我们需要使用server.servlet.context-path而不是spring.data.rest.basePath

链接到文档https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

所以application.yml应该看起来像这样:

server:
    servlet:
        context-path: /jh
        session:
            cookie:
                http-only: true

答案 3 :(得分:0)

此链接中的信息也有助于解决问题。

https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-external-config.html

按照上面的 Haifeng Zhang 回答构建应用程序配置类后,您可以通过以下方式在任何地方访问这些属性:

@Autowired 私有 ApplicationProperties redis;

然后访问属性

int myEnvironmentPort = redis.getPort();