一、
1、问题背景:
俩个系统做集成,服务端用spring集成cxf发布的接口。客户端将在业务中集成服务端的接口,为服务端接口提供数据。
客户端为服务端批量传入多条数据,如果服务端接口不配置事务,这样的话,前俩条数据添加成功了,第三条数据添加失败
程序不会回滚。但是客户端知道服务端程序出错了,会把整个客户端的事务回滚,也就导致俩个系统中的数据不一致。
2、解决:
所以,服务端一定要控制事务。spring集成的cxf,一定要基于接口发布,接口配置事务。
二、
1、问题背景:
生成的客户端带有ip地址在注解中,所以我就研究一下,ip地址如何使动态配置的。后来发现不可行。继续详细看了一下生成的客户端程序,发现此文件并没有什么卵用。
2、解决
cxf生成的客户端程序,如果采用spring集成cxf调用服务,带有三个ip地址的java文件(一般以service结尾的),没有用,它只是为以client结尾的调用文件服务的。这个
文件也可以直接删掉。
三、地址动态(占位符)
我想把spring配置的客户端配置文件的地址写成动态的。因为我的资源文件被spring已经加载了,所以我可以将地址写到被加载的这个配置文件中就行。通过占位符去取,注意
这个位置,spring加载资源文件一定要比用到占位符的地方要早。不然取不到(现在发现可以了,不知道为什么,具体看占位符加载机制(容器先加载spring的xml,然后初始化bean时,会为bean赋值,包括里面的占位符,所有的bean都是在spring加载后一起初始化的,通过控制台也可以看出来,先加载了web.xml中context中配置的所有的xml,然后再初始化,例如我把占位符故意输错,控制台就会看到xml全部加载完成了(Initializing Spring root WebApplicationContext),然后报错(ContextLoader:307 - Context initialization failed,org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name)))。可以通过将如下内容与用到占位符的放在一个资源文件中,这样就不用考虑文件加载顺序了。
确保占位符可以取到值。或则配置多个此文件也可以。在每个用到占位符的文件上面都加上此配置,id不要重复(为验证)。不同配置文件中可以重复,只是会覆盖。
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:applicationConf.properties</value>
</property>
<property name="fileEncoding" value="utf-8"/>
</bean>
以下动态占位符:可以拼成字符串:如下格式即可
address="${bj.url}lanling-hr/services/bj?wsdl" />
四、本地ip127开头的都可以访问项目
本地发布的接口127.0.0.1可以访问接口。发现以127开头的地址都可以访问。这也导致我看了一晚上才发现的问题。我将地址配置成127.89.23.1,实际上我是有意配置错误
就是想让接口访问不了,但是发现程序还是正常访问了。后来将这个地址与wsdl文件相结合访问wsdl,没想到既然还可以访问,我也是醉了。后来把地址换成172开头的才不能访问,具体什么原因我也不知道。下次再出现类似的问题,可以拿到这个地址,在浏览器中访问以下。
解释:
本地回路地址是指本地回环地址,本地回环地址不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在windows操作系统中也有相似的定义,所以通常在不安装网卡前就可以ping通这个本地回环地址。
作用:
一般都会用来检查本地网络协议、基本数据接口等是否正常的。
主要作用有两个:一是测试本机的网络配置,能PING通127.0.0.1说明本机的网卡和IP协议安装都没有问题;另一个作用是某些SERVER/CLIENT的应用程序在运行时需调用服务器上的资源,一般要指定SERVER的IP地址,但当该程序要在同一台机器上运行而没有别的SERVER时就可以把SERVER的资源装在本机,SERVER的IP地址设为127.0.0.1同样也可以运行。
本地回环地址指的是以127开头的地址(127.0.0.1 - 127.255.255.254),通常用127.0.0.1来表示。