我希望使用正确的属性方式在多个环境中进行部署......但示例并不起作用: 网址:https://docs.mulesoft.com/mule-user-guide/v/3.8/deploying-to-multiple-environments
我创建了一个项目,其http配置如示例所示:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${mule.env.host}"
port="${mule.env.port}"
basePath="${mule.env.basePath}" />
他们说的地方
此示例使用Spring的属性占位符解析机制。可变位清晰可见:基本路径,主机和端口可能因部署此连接器的每个环境而异。在部署应用程序时,mule.env可以被您正在部署的特定环境动态替换,例如作为qa或prod。
我在java / main / resources中创建了一个名为config.properties的文件:
dev.basePath=test/products
dev.host=localhost
dev.port=8082
prod.basePath=products
prod.host=www.acme.com
prod.port=8081
并设置占位符:
<context:property-placeholder location="config.properties"/>
我的mule-app.properties:
mule.env=dev
当我在AS中运行时:
[Could not resolve placeholder 'mule.env.host' in string value "<http:listener-config name="ejemplop....]
如果我改变了以下值:
${mule.env.host} to ${${mule.env}.host}
并且host属性有效,但是如果我对端口
执行相同的操作(${${mule.env}.port}
给我一个错误
[..${${mule.env}.port}' is not a valid value of union type 'substitutableInt'....]
但如果我添加我的属性文件
env.port=${${mule.env}.port}
并将连接器更改为:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${${mule.env}.host}"
port="${env.port}"
basePath="${mule.env.basePath}" />
它的作品。 有一种奇特或正确的方法吗?
答案 0 :(得分:1)
CHo,你正朝着多重环境的方向前进,但还没到那里。如果您需要多个属性文件,我会建议您使用多个属性文件,每个属性文件具有相同的属性,但具有相同的名称但环境特定的值。
在你的应用程序中,你会有类似的东西:
<context:property-placeholder location="config_${mule.env}.properties"/>
然后在你的流程中你将拥有:
<http:listener-config name="HttpListenerConfiguration"
doc:name="HTTP Listener Configuration"
host="${host}"
port="${port}"
basePath="${basePath}" />
然后您将拥有一个名为config_dev.properties的属性文件,其中包含:
basePath=test/products
host=localhost
port=8082
您将拥有另一个名为config_prod.properties的属性文件:
basePath=products
host=www.acme.com
port=8081
当mule.env设置为dev时,将使用config_dev值。设置为prod时,将使用config_prod值。
答案 1 :(得分:0)
我认为你可以忽略实际用途中提到的Spring。在幕后,我认为全球占位符使用该技术。以下是适用于我的简单步骤:
将位置设置为:
$ {mule.env}的.properties
在/ src / main / app中创建qa.properties文件并定义属性:
mule.env.host =本地主机
mule.env.port = 8082
在src / main / app中创建dev.properties文件并定义属性:
mule.env.host =本地主机
mule.env.port = 8081
在HTTP侦听器配置中,按如下方式设置主机和端口:
$ {mule.env.host}
$ {mule.env.port}
使用步骤1中的qa环境变量运行应用程序时,从端口8081启动应用程序。将环境变量更改为dev并重新部署应用程序。现在,您从端口8082启动应用程序。
以下是XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd">
<context:property-placeholder location="${mule.env}.properties"/>
<http:listener-config name="HTTP_Listener_Configuration" host="${mule.env.host}" port="${mule.env.port}" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="jsonplaceholder.typicode.com" port="80" doc:name="HTTP Request Configuration"/>
<flow name="myprojectFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/users" method="GET" doc:name="HTTP"/>
</flow>
</mule>