请教关于CXF的地址配置问题

liuex 发布于 2011/12/05 17:00
阅读 1K+
收藏 0

工程中有大量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的配置文件、重启服务之类的。

请教大家,这个应该怎么做呢?

加载中
0
liuex
liuex

其实麻烦的地方就在于那两个bean, uvsmsClientFactory 这个工厂对象创建的时候就需要提供address属性,所以当时直接把地址写在了spring的配置文件中了。

uvsmsClientFactory对象应该是singlton作用域的,uvsmsClient也是singlton作用域的。

0
虫虫
虫虫
。。。你这个需求真奇怪,难道修改配置文件不比修改数据库更方便吗?
liuex
liuex
应用跑在1个集群上,集群里有4台主机、12个实例,工程里面有n个配置文件呢。。。。。
0
cwledit
cwledit

你可以使用SpEL , 注册一个bean , 在这个bean里面写一个方法(从数据库查找服务器的地址),通过SpEL设置value的值 value =" #{beanName.selectServiceIp()} "

但是像楼上说的那样, 不是很推荐你这么干

0
景愿
景愿

始终没找出如何动态改变spring配置文件并生效

启动即注入,更改后也不会重新载入,求方法

0
cwledit
cwledit
你用SpEL不可以吗? 更改后能重新载入你试试 scope="prototype" , 这样还是不可以的话就只能自己写个aspect来重新载入了
liuex
liuex
我觉得prototype作用域不大合适。。。
0
liuex
liuex
是不是大家使用cxf的时候,服务端地址都是直接写在spring配置文件中的呃,木有人使用数据库的方式吗
0
Sam_yi
Sam_yi
你用Spring load 配置文件的bean   从数据库读取后 写到properties里  然后  address 用 properties 的key 表示 
返回顶部
顶部