在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
另一种可能性是配置本身不起作用。
答案 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-wait
和host
:
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)
此链接中的信息也有助于解决问题。
按照上面的 Haifeng Zhang 回答构建应用程序配置类后,您可以通过以下方式在任何地方访问这些属性:
@Autowired 私有 ApplicationProperties redis;
然后访问属性
int myEnvironmentPort = redis.getPort();