请教关于CXF的地址配置问题
工程中有大量webservice接口,服务端、客户端都有,我们全部使用apache cxf编写的,然后使用cxf与spring结合。例如以下是一个客户端的cxf+spring的配置:
<!-- 短信网关下行客户端 --> <bean id="uvsmsClient" class="com.oraro.mboss.ua.sim.service.ws.client.uvsms.UVSMSINTFPortType" factory-bean="uvsmsClientFactory" factory-method="create"/> <bean id="uvsmsClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="com.oraro.mboss.ua.sim.service.ws.client.uvsms.UVSMSINTFPortType"/> <property name="address" value="http://135.224.113.10:7001/XJCTSWSMSINTF/services/UVSMSINTF"/> </bean>注意到里面的address那个属性,就是webservice服务端的发布地址。
现在的问题是:我想把服务端地址这个属性改成使用数据库配置,这样以后需要修改什么第三方平台的地址的时候,改改数据库就行了,不用再去修改spring的配置文件、重启服务之类的。
请教大家,这个应该怎么做呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你用Spring load 配置文件的bean 从数据库读取后 写到properties里 然后 address 用 properties 的key 表示
是不是大家使用cxf的时候,服务端地址都是直接写在spring配置文件中的呃,木有人使用数据库的方式吗
我觉得prototype作用域不大合适。。。
你用SpEL不可以吗? 更改后能重新载入你试试 scope="prototype" , 这样还是不可以的话就只能自己写个aspect来重新载入了
始终没找出如何动态改变spring配置文件并生效
启动即注入,更改后也不会重新载入,求方法
你可以使用SpEL , 注册一个bean , 在这个bean里面写一个方法(从数据库查找服务器的地址),通过SpEL设置value的值 value =" #{beanName.selectServiceIp()} "
但是像楼上说的那样, 不是很推荐你这么干
应用跑在1个集群上,集群里有4台主机、12个实例,工程里面有n个配置文件呢。。。。。
。。。你这个需求真奇怪,难道修改配置文件不比修改数据库更方便吗?
其实麻烦的地方就在于那两个bean, uvsmsClientFactory 这个工厂对象创建的时候就需要提供address属性,所以当时直接把地址写在了spring的配置文件中了。
uvsmsClientFactory对象应该是singlton作用域的,uvsmsClient也是singlton作用域的。