问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java程序员在面试中被问到如何配置多数据源以及如何配置多数据源下的...

发布网友 发布时间:2022-05-01 04:05

我来回答

2个回答

热心网友 时间:2022-04-10 13:44

你好,我来先回答你的第一个问题:
通常多数据源,在spring中配置如下,如果你想切换环境ENV 的值,在property中
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"></property>
<property name="ignoreUnresolvablePlaceholders" value="true"></property>
<property name="nullValue" value="NULL"></property>
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="com.spring..JDBCConfig">
<property name="driverClassName" value="${${Env}.jdbc.driverClassName}"></property>
<property name="url" value="${${Env}.jdbc.url}"></property>
<property name="username" value="${${Env}.jdbc.username1}"></property>
<property name="password" value="${${Env}.jdbc.password}"></property>
</bean>

jdbc.properties
*****************************
Env=PROD

jdbc.driverClassName=${${Env}.jdbc.driverClassName}
jdbc.url=${${Env}.jdbc.url}
jdbc.username=${${Env}.jdbc.username}
jdbc.password=${${Env}.jdbc.password}

######### JDBC Configuration for DEV Environment ###############
DEV.jdbc.driverClassName=com.mysql.jdbc.Driver
DEV.jdbc.url=jdbc:mysql://localhost:3306/devportal
DEV.jdbc.username=DEVuser
DEV.jdbc.password=DEVpwd

######### JDBC Configuration for UAT Environment ############
UAT.jdbc.driverClassName=com.mysql.jdbc.Driver
UAT.jdbc.url=jdbc:mysql://localhost:3306/UATportal
UAT.jdbc.username=UATuser
UAT.jdbc.password=UATpwd

########## JDBC Configuration for PROD Environment ############
PROD.jdbc.driverClassName=com.mysql.jdbc.Driver
PROD.jdbc.url=jdbc:mysql://localhost:3306/portal
PROD.jdbc.username=root
PROD.jdbc.password=admin,
我这里有三套环境,分别是DEV,UAT和PROD,这种方式可以灵活切换的。

我再回答你的第二个问题:
还请你去http://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/transaction.html这里看下,很详细,不过是英文的哦

热心网友 时间:2022-04-10 15:02

1、使用了spring的aop思想,实现了动态数据源的切换。
2、spring的事务管理,是基于数据源的,所以如果要实现动态数据源切换,而且在同一个数据源中保证事务是起作用的话,就需要注意二者的顺序问题,即:在事物起作用之前就要把数据源切换回来。
举一个例子:web开发常见是三层结构:controller、service、。一般事务都会在service层加的,如果使用spring的声明式事物管理,那么在调用service层代码之前,spring会通过aop的方式动态添加事务控制代码,所以如果要想保证事物是有效的,那么必须spring添加事务之前把数据源动态切换过来,也就是动态切换数据源的aop要至少在service上添加,而且要在spring声明式事物aop之前添加。
最简单的方式是,把动态切换数据源的aop加到controller层,这样在controller层里面就可以确定下来数据源了。不过,这样有一个缺点就是,每一个controller绑定了一个数据源,不灵活。对于这种:一个请求,需要使用两个以上数据源中的数据完成的业务,就无法实现了。
针对上面的这种问题,可以考虑把动态切换数据源的aop放到service层,但要注意一定要在事务aop之前来完成。这样,对于一个需要多个数据源数据的请求,我们只需要在controller里面注入多个service实现即可。但这种做法的问题在于,controller层里面会涉及到一些不必要的业务代码,例如:合并两个数据源中的list...
针对上面的问题,可以再考虑一种方案,就是把事务控制到层,然后在service层里面动态切换数据源。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? win10无线网络连接打不开 正宗肉夹馍是江苏的吗 问:win10笔记本,为什么打开不了无线网,怎么点都打不开, 肉夹馍是西安的正宗,还是潼关的正宗 肖申克的救赎的结局是什么? 戴尔笔记本win10 wifi开关打不开 苹果手机用移动蜂窝在怎么在APP store 下载大于100M的软件? 二零一二年我在贵阳利美康美容美发学院的证件掉了怎么补回来 《肖申克的救赎》结局是多少? 校园短剧剧本 爱国主题 为什么QQ消息在横屏上显示却刮不掉? 信用卡和银行卡有什么不一样? 屏幕失灵怎么回事? 信用卡与银行卡有区别吗?如果有,请问是什么? 我刚买的OPPOReno十倍变焦版,为什么没有六十倍数码变焦, 上海虹口区吉祥馄饨外卖电话 关于爱国的话剧剧本..急 甲状腺术后水肿嗓子沙哑怎么办,可以对喉部热敷吗? 如何将小米手机里面自带的铃声用蓝牙发给别人,要详细步骤,我找不到怎么发送 十分钟左右的短话剧剧本(大学) 怎样确定真假居民身份证。 求巡音ルカ MY BABY BLUE【オリジナル】人设图啊啊啊啊 嘉利国际控股有限公司怎么样? 爱国主义话剧剧本怎么写 肖申克的救赎结局什么意思 美容美体行业未来的前景会是什么样的呢!! 美容行业前景分析及职业规划? 联想电脑升级到win10后无线网的那个开关始终打不开,怎么办? 一般一次要做多少时间? 第二代身份证如何识别真假? 在美容美发学校毕业算是中专文凭吗 QQ信息弹出来的时候,左划或者右划就能忽略信息,现在我的手机划不动... 请告诉我关于六年级,介绍自己的作文 求歌词和中文翻译 自我介绍 安静类型的 六年级作文500字 Bel Amis的《Baby Blue》 歌词 两百多元的水滴屏手机是仿真机吗 My.LOVE.baby是什么意思? 这两句话分别是什么意思啊? 网上卖的HUP40水滴屏手机699元质量好吗?