Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在配置文件中创建计算属性_Java_Spring_Spring Boot_Properties_Configuration - Fatal编程技术网

Java 如何在配置文件中创建计算属性

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,而不

我有一个spring启动应用程序。我想我需要重写bean属性,因为我想在应用程序启动之前创建计算属性。 在我的YAML配置文件中

#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类来执行您的代码。按照所提供链接中的描述捕获输出。最后但并非最不重要的一点是,将输出分配给属性变量,您应该完成以下操作。