Spring多项目bean冲突及properites读取验证

作者&投稿:泣骆 (若有异议请与网页底部的电邮联系)
~ 目前都配置了相同的bean,期望是以后能配置5个不同的数据源

可以看到bean被覆盖了4次,只有一个bean生效

所有该类型的bean在声明时候被声明为primary

发生异常,可以看到不同id的bean由于都被设置成primary导致异常

很容易理解,primary对于不同ID相同的Class实例来说只能有一个,对于相同的ID实例则会直接覆盖

正常启动,可以看到创建了两个相同类型的实例

可以看到发生覆盖情况,因此可以总结出

bean是否发生覆盖只跟beanId有关而跟bean的类型无关

当两个相同的类型的bean都被配置成primary时会发生异常

当需要配置多数据源时,需要为每个子系统的bean配置不同的ID,以防发生覆盖

下面再接着说一下Springboot对.properties文件的读取

我们知道在使用springboot的脚手架建立项目时默认会有application.properties的配置文件

Springboot读取.properties文件的读取顺序如下所示

其中需要注意的是Springboot对于同文件名只读取一次,高优先级覆盖低优先级

以上是错误的解读,实际上SpringBoot是对相同的属性以先读取的为主,文件仍然会读取多次

如果上面的图容易产生混乱的话看下面的顺序就好理解了

通俗的说SpringBoot默认只加载application-{profile}.properites

当没有指定Profile时会默认加载application.properties文件

而当指定了SpringBoot的Profile时则会默认加载application-{profile}.properties文件

当然也可以让SpringBoot除了加载默认文件以外也可以人为指定加载额外的properties文件

在我们的项目中则是通过这种方式进行

这样SpringBoot会去同时检索application-{profile}和application文件

检索顺序如上面的图所示

接下面我们进行验证

配置两个bean

第一个bean

这里的属性通过主项目的application-dev.properties文件进行注入

第二个bean

属性通过子项目的application.properties文件进行注入

子项目目录结构

可以看出并没有符合规范结构

我们让主项目引用子项目的jar包

运行结果

启动报错,没有读取成功

接下来我们修改子项目的结构

可以看到现在已经符合规范结构,重新打包编译再进行验证

正常启动,说明此时属性注入正常,application.properties被成功读取

然后我们修改application.properties文件名为application-dev

预期结果会出现覆盖现象

正常启动,打脸了,翻阅资料发现

文件的读取是多次的,对相同的属性值来说以先读取的为标准,但是不同的属性依然可以正常读取

通过验证发现,想要在子项目配置多个子项目的情况下每个项目想引用不同的数据源首先需要保证

1.每个子项目必须配置不同ID的bean,否则出现覆盖现象,需要注意的是各个子系统中的sqlSessionFactiory所指定的mapper.xml路径不要出现重复,否则会造成一条SQL被多个bean命中切面

2.子系统所指定的.properties文件中与主系统.properties文件名相同时,若出现相同属性,以先读取的为主

3.除非特殊设置读取路径,否则需要按照规范放在指定路径下容器才能读取properties文件


执行cl.exe出错
首先,你的代码中漏掉一个分号一个双引号。其次,出现cl.exe执行错误是预编译设置的问题。在VC中,依次点击"project"->"Settings",选中"C\/C++"标签,在分类中选择"Precompiled Header",如果设置如下,则会出现cl.exe执行错误的问题:此时构建项目,出来的结果是:将设置改为如下:问题便解决了:得到的...

___he didn't attend the meeting. A.to my surprise B.what surprised...
D .A的话后面要加逗号的。 即To my surprise,he didn't attend the meeting.B的话what引导的是一个主语从句,是一个名词性从句,在这里作为主语。既然是主语就该有谓语。所以正确的应该是What surprised me most is that he didn't attend the meeting.这里应该是It作形式主语,是外国人的一种...

澳大利亚式英语有什么特点?
语言的地区差异要小得多。但并不是没有地区差异和社会阶 层之间的差异。昆士兰人能指出他们用词和帕斯人及阿德莱 德人的不同。白人和黑人说的英语也有差别,工人阶级和中 产阶级也能通过语言看出来。但社会阶层之问、地区之间的 差异,比起英国和美国来,要小得多。本文 仅 从 语音、词汇和语法三...

C语言 矩阵相加C=A+B
for(int j = 0;j <4;j++)scanf("%d",&b[i][j]);for(int i = 0;i < 3;i++) \/\/计算c { for(int j = 0;j <4;j++){ c[i][j] = a[i][j] + b[i][j];printf("%d ",c[i][j]);} pringf("\\n");} } 试试吧......

如何在jbpm的handler中能够使用由spring管理的bean对象
Spring容器所管理的bean对象都是由beanFacotry工厂来实例化,所以要使用pring容器中bean实例对象,必须该类也是由spring容器所管理,否则无法从bean工厂中得到bean实例对象。 理解了上面的简单阐述之后,下面我来看看在jbpm中是如何访问spring容器中的bean对象的 在一个将jbpm集成到ssh架构中项目中,要想在一个由jbpm所管理...

澳大利亚式英语有什么特点
语言的地区差异要小得多.但并不是没有地区差异和社会阶 层之间的差异.昆士兰人能指出他们用词和帕斯人及阿德莱 德人的不同.白人和黑人说的英语也有差别,工人阶级和中 产阶级也能通过语言看出来.但社会阶层之问、地区之间的 差异,比起英国和美国来,要小得多.本文 仅 从 语音、词汇和语法三方面来...

开一家家具公司需要什么条件
1.核名:到工商局去领取一张“企业(字号)名称预先核准申请表”,填写你准备取的公司名称,由工商局上网(工商局内部网)检索是否有重名2.租房:签订好租房合同后,还要到税务局去买印花税,按年租金的千分之一的税率购买, 3.编写“公司章程”:可以在工商局网站下载“公司章程”的样本,修改一下就...

澳大利亚英语有何特点?
语言的地区差异要小得多。但并不是没有地区差异和社会阶 层之间的差异。昆士兰人能指出他们用词和帕斯人及阿德莱 德人的不同。白人和黑人说的英语也有差别,工人阶级和中 产阶级也能通过语言看出来。但社会阶层之问、地区之间的 差异,比起英国和美国来,要小得多。本文 仅 从 语音、词汇和语法三...

扎鲁特旗18524532703: 两个项目都有spring aop,有引用关系,如何一起工作 -
笃览复方: 打成jar包的是无法aop的,spring只会扫描当前classespath目录下的类的,你要自己在spring.xml中定义bean,你想想sessionFactory,他不就是我们再xml中定义的.或者你

扎鲁特旗18524532703: spring的bean配置文件中p:代表什么 -
笃览复方: p表示对该bean里面的属性进行注入,格式为p:属性名=注入的对象 效果与在bean里面使用标签一样

扎鲁特旗18524532703: spring整合mybatis出现No matching bean of type问题,新人求教 -
笃览复方: spring整合mybatis出现No matching bean of type问题 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 改为 ...

扎鲁特旗18524532703: Springmvc项目会遇到同一类型有多个Bean的情况吗?那样的话是不是用枚举更好些? -
笃览复方: 首先,我觉得这个应该被归到springframework的使用中问题. 其次,可以出现同一个类型的多个bean,比如,配置3个user类型的bean, id分别是user1、user2、user3.注入到不同的bean中.不过确实没有想到什么好的应用场景. 至于是否用枚举类型更好这个问题,我觉得要根据具体业务场景来看.

扎鲁特旗18524532703: spring中创建bean对象时多例和单例的区别 -
笃览复方: 在<bean>标签中,加上scope属性来控制对象在容器中的数量.1、scope = singlton 单例模式,对象在容器中全局唯一,在IOC容器初始化的时候该对象就会被创建.2、scope = prototype 多例模式,在每一次调用getBean的时候IOC容器才会创...

扎鲁特旗18524532703: spring的bean一般是单例模式,那多线程是怎么解决的 -
笃览复方: 多线程跟单例模式不冲突啊,同时有多个请求用到了一个spring的bean,没毛病啊.而且就因为是单例,又有多线程,才会有人问,【单例是不是线程安全?】 这个问题的存在本身就隐含解答了你的问题,单例是单例,多线程是多线程.

扎鲁特旗18524532703: Spring中bean的作用范围怎么确定 -
笃览复方: spring定义的bean有两种作用范围,一种是singleton(单例),一种是prototype(多实例),默认的是singleton,这种定义的bean实例的作用域是与spring的容器一致的,只有spring容器初始化,调用getBean得到的singleton实例始终是同一个bean的实例,而prototype的实例,是每当调用getBean得到实例的时候spring都会new一个实例来给你.

扎鲁特旗18524532703: springboot 项目启动报错 -
笃览复方: 1.新建Spring boot,出现src的包上出现错误的叉号:分析原因: 你要更新一下选择项目-----Maven----Updata project,或者删除jar包---Libraries---Maven Dependencies,然后重新关闭eclipse,重新启动!2.如果你项目与别人一样,怎么试都不行...

扎鲁特旗18524532703: 怎样加载多个Spring bean 配置文件 -
笃览复方: 对于大多数的应用,从表现层的action,到持久层的DataSource,都被Spring 作为 bean 管理.如果这些bean 被配置在同一个文件中,阅读及维护该配置文件将是一件非 常有挑战的事情.因此, Spring 建议:将一个大的配置文件分解成多个小...

扎鲁特旗18524532703: 当一个接口有多个实现类时,Autowired会出问题吗 -
笃览复方: 你这是Spring的问题吧!@Autowired默认是按类型匹配的方式,在容器查找匹配的bean,当且仅有一个匹配的bean时,Spring将其注入到@Autowired所标注的变量中.如果容器中有一个以上匹配的bean时,则可以通过@Qualifier注解限定...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网