我是 Spring 新手。我现在了解如何使用占位符从属性文件中读取值:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties.txt"/>
</bean>
<int-mqtt:outbound-channel-adapter id="mqtt-publish"
client-id="${clientID}"
client-factory="clientFactory"
auto-startup="true"
url="${url}"
default-qos="${qos}"
default-retained="${retain}"
default-topic="${topic}" />
上面的代码一切正常...但是...是否可以将 clientID 替换为运行时(或用户输入)生成的内容,而不是从属性文件中静态读取它?
最佳答案
运行时,您的意思是每条消息都是动态的吗?
在这种情况下,不会,因为在建立连接时会使用 clientId,该连接会执行一次(或者在与服务器的连接丢失时)。
如果您打算在应用程序上下文初始化时以编程方式提供动态值,那么,是的,Spring Expression Language就是解决方案。
例如,#{myBean.myProperty}
将调用 bean myBean
和 #{ 上的
将调用 getMyProperty()
方法myBean.someMethod()}someMethod()
。
另请参阅dynamic-ftp示例,它通过在子应用程序上下文中使用属性占位符按需创建新的出站适配器,在运行时使用占位符。
关于java - Spring 将动态生成的值放入占位符中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818328/