如何在配置文件中进行计算属性

时间:2017-03-18 09:03:43

标签: java spring spring-boot properties configuration

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

$(document).ready(function(){
        $("#workshop1").change(function(){
            $("#workshop2 option").each(function(){
                if ($(this)["0"].value) {
                    $(this).removeAttr("disabled");
                }
            });             
            $("select[name=workshop2] option[value=" + $("select[name=workshop1]").val() + "]").attr("disabled", "disabled");
        });
        $("#workshop2").change(function(){
            $("#workshop1 option").each(function(){
                if ($(this)["0"].value) {
                    $(this).removeAttr("disabled");
                }
            });     
            $("select[name=workshop1] option[value=" + $("select[name=workshop2]").val() + "]").attr("disabled", "disabled");
        }); 
    });

但是,在启动应用程序 server.port 属性后,值 123 但我不想要此值,我想要 myport 值用特殊方法计算。

我试着写bean(如下所示),但它也不起作用。它应设置为9999,而不是123。

#this property needs to be calculated
myport:
  port: 123
server:
  port: ${myport.port}

1 个答案:

答案 0 :(得分:0)

如果要更改服务器的端口,则需要在服务器启动之前提供该属性。

将您的application.yml更改为:

server:
  port: ${myport}

您使用成绩,因此您可以通过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
}

请注意,将addResources的{​​{1}}属性设置为bootRun会导致从项目的静态构建目录加载资源。但无论如何,必须使资源处理能够用于Spring-Boot。

如果您需要有关如何捕获Java任务结果(与javaExec一起使用)的更多信息,您可能会发现它here

如果您需要Java中的业务逻辑来计算您的端口(以及最重量级的端口),那么最后一个选项当然是提供自定义等级插件。