Java 如何在配置文件中创建计算属性
我有一个spring启动应用程序。我想我需要重写bean属性,因为我想在应用程序启动之前创建计算属性。 在我的YAML配置文件中Java 如何在配置文件中创建计算属性,java,spring,spring-boot,properties,configuration,Java,Spring,Spring Boot,Properties,Configuration,我有一个spring启动应用程序。我想我需要重写bean属性,因为我想在应用程序启动之前创建计算属性。 在我的YAML配置文件中 #this property needs to be calculated myport: port: 123 server: port: ${myport.port} 但是,在启动应用程序服务器之后。port属性的值为123,但我不希望使用此值,我希望使用特殊方法计算myport值 我试图编写bean(如下所示),但它也不起作用。它应该设置为9999,而不
#this property needs to be calculated
myport:
port: 123
server:
port: ${myport.port}
但是,在启动应用程序服务器之后。port属性的值为123,但我不希望使用此值,我希望使用特殊方法计算myport值
我试图编写bean(如下所示),但它也不起作用。它应该设置为9999,而不是123
@ConfigurationProperties(prefix = "myport", ignoreUnknownFields = true)
public class ServerPortConfigurationBean extends ServerProperties {
@Override
public Integer getPort() {
return super.getPort();
}
@Override
public void setPort(Integer port) {
super.setPort(9999);
}
}
如果要更改服务器的端口,则需要在服务器启动之前提供属性 将application.yml更改为:
server:
port: ${myport}
使用grade可以通过processResources任务提供属性,如下所示:
task calculateServerPort {
// calculate your port here
// if you really need business logic in Java for calculation, you could use the javaExec task in here
project.ext.myport = 8007 // make it available as project.property here
}
processResources {
dependsOn(calculateServerPort)
expand project.properties
}
bootRun {
addResources = false
}
请注意,将bootRun
的addResources
属性设置为false
会导致从项目的静态生成目录加载资源。但无论如何,它是必须的,以使资源处理工作为春季开机
如果您需要更多关于如何捕获Java任务(与javaExec一起使用)结果的信息,您可以找到它
如果您需要Java中的业务逻辑来计算端口(以及最重的端口),最后一个选项当然是提供一个自定义级别的插件。如何启动Spring Boot服务器?Maven或Gradle或任何其他方式?我使用Gradle BootRun运行应用程序您的端口需要特殊的计算逻辑,还是只想为您的实例使用随机可用的端口?对于后者,只需设置属性server.port=0,然后Spring Boot将采用随机可用端口。我同意此解决方案,但我希望计算的端口值将是可用端口
socket=new ServerSocket(0)代码>socket.setReuseAddress(true)代码>int-port=socket.getLocalPort()代码>返回端口
这样您就可以编写一个Java类来执行您的代码。按照所提供链接中的描述捕获输出。最后但并非最不重要的一点是,将输出分配给属性变量,您应该完成以下操作。