我们有一个Spring 4.0.5。我们错误地引入了两个同名的bean。这两个bean都是RestTemplate版本4.2.2的实例,该版本是用于进行HTTP调用的Spring框架:
第一个“restTemplate”bean
@Bean(name = "restTemplate")
protected RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new RestTemplateErrorHandler());
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
// Disable exceptions on unknown incoming properties
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jacksonConverter.setObjectMapper(mapper);
messageConverters.add(jacksonConverter);
messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}
第二个“restTemboard”豆,完全生的
@Bean(name = "restTemplate")
protected RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate;
}
两者之间的主要区别在于错误处理。这就是问题所在:
我们有四台服务器在运行,我们在每台服务器中部署了相同的war文件。根据日志,我们100%确定在前两台服务器中使用了带有错误处理的restTemplate实例。在另外两种情况下,不使用没有错误处理的实例。
为什么Spring会这样?它以完全不确定的方式注入“restTemboard”bean。这种行为的原因可能是什么?我希望在所有4台服务器中都有相同的“restTemboard”实例。
在这里,我把日志,显示我试图解释什么。看看大胆的声明!!
第一条:
[时间戳=19:09:23.846][线程="localhost-启动停止-1"][会话="未定义"][请求="未定义"][级别=INFO][logger=o. s. b. f. s. DefaultListableBeanFactory][class=org.springframework.beans.factory.support.DefaultListableBeanFactory][line=839]-用不同的定义重写bean'restTemboard'的bean定义:替换[Root bean: class[null];范围=;抽象=false; lazyInit=false; AutowireMode=3;依赖检查=0; autowireCandidate=true;主=false; factoryBeanName=配置通用;factoryomeodName=restTemboard; initomeodName=null;破坏的方法名称=(推断);定义在com.service.common.config.配置通用]与[根bean:类[null];范围=;抽象=false; lazyInit=false; AutowireMode=3;依赖检查=0; autowireCandidate=true;主=false; factoryBeanName=配置中心保留;factoryomeodName=restTemboard; initomeodName=null;破坏的方法名称=(推断);定义在com.service.centralreservations.config.ConfigCentralReservations]
服务器二:
[timestamp=19:04:41.717][thread=“localhost-startStop-1”][session=“undefined”][request=“undefined”][level=INFO][logger=o.s.b.f.s.DefaultListableBeanFactory][class=org.springframework.beans.factory.support.DefaultListableBeanFactory][line=839]-用不同的定义覆盖bean“restemplate”的bean定义:替换[Root bean:class[null];范围=;抽象=假;lazyInit=false;自动连线模式=3;dependencyCheck=0;autowireCandidate=true;主要=错误;factoryBeanName=configCentralReservations;factoryMethodName=restTemplate;initMethodName=null;destroyMethodName=(推断);在com中定义。服务中央储备。配置。ConfigCentralReservations]和[Root bean:class[null];范围=;抽象=假;lazyInit=false;自动连线模式=3;dependencyCheck=0;autowireCandidate=true;主要=错误;factoryBeanName=configCommon;factoryMethodName=restTemplate;initMethodName=null;destroyMethodName=(推断);在com中定义。服务常见的配置。配置通用]
我可以想象很多原因:
你应该问问自己:为什么它应该使用一个而不是另一个?你在任何地方指定了订单吗?Spring在这方面提供了任何保证吗?如果没有,你不应该假设任何事情。
我做了研究,发现应该这样做我不知道java对象像指针一样工作。我以为只有当两个对象相等时才会传递值。我甚至创建了一个简单的测试应用程序,它可以设置和获取一个对象的数量。再一次,我把这两个对象都等同起来。更改一个对象的元素似乎也会影响另一个对象。我不知道该怎么在谷歌上搜索这个。所以我才把整个故事都告诉你。我只得到与c编程有关的文档。我觉得我的底子都碎了。我现在才知道是如何工作的。我试着做 这不影响N
问题内容: 我有两个表,它们的定义如下: 和这里代表。 我做了一个简单的本地SQL只能加入到选择和为: 但是我在行上遇到异常: 堆栈跟踪 : 你能建议出什么事了吗? 问题答案: 您需要设置结果别名。
在Spring3.1中,我试图通过JMX导出相同的bean,使用两个不同的bean名称和两个不同的接口。 但是,当我启动我的应用程序时,我得到了一个异常 有没有任何方法可以在两个不同的mbean名称下注册同一个bean实例,从而公开不同的接口?
我是个新手,所以请不要介意我的问题是愚蠢的 我有一个实现两个接口的类 我正在上下文类中定义bean对象,如下所示:
我有两个spring bean类实现相同的接口。 你能给我一个建议吗。
在Spring IOC中,bean的两个定义(具有相同的名称和类)是否有效? 我有两个bean定义文件包含在web中。xml。参见下面的示例。 应用Context-beans1.xml applicationContext-beans2。xml 到目前为止,我还没有遇到任何问题。但是,这可能会影响到多线程和集群的现实环境吗? 注意:这两个XMLs都被加载,因为我可以使用在这两个XMLs中定义的其他