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

java程序员在面试中被问到如何配置多数据源以及如何配置多数据源下的分布式事务,该怎么回答?看清再做答

发布网友 发布时间:2022-04-24 09:50

我来回答

2个回答

热心网友 时间:2023-10-09 13:05

你好,我来先回答你的第一个问题:
通常多数据源,在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这里看下,很详细,不过是英文的哦

热心网友 时间:2023-10-09 13:05

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
锁阳可以和枸杞泡酒吗泡酒方法 为什么360手机卫士老是自动退? k8s入门实战(一)--概念篇 基金估值和收益有关系吗 基金分析指标重要吗 股票休盘什么意思 股票什么情况不能买 股票什么时候休盘 欧洲股市为什么休市 公司实习报告有用吗 未成年小孩户口可以单独迁移吗 抖音企业信息地址不是自己的怎么添加? 未成年生孩子,孩子能上户口么 java 分库分布式事务怎么处理 韩国f2签证申请条件 java分布式web系统如何做分布式事务控制? 抖音作品里的地址怎么是红城 未成年小孩可以办独立户口吗? Java开源框架是什么? 分布式事务怎么来实现?xa?cap?base java的框架spring如何配置分布式事务? Java分布式,高并发的开发,只要用到的工具都有哪些 Java-JAVA中都有哪几种分布式实现方式,各有什么优缺点 cad怎么画那种由一个个长方形构成的虚线呢? 我在设计图上看到这种线,但就是不会画 cad用实线画好了线,或者是圆或者是矩形,再次点击是为什么变成虚线了? 妇科问题 妊娠第10个月(37~40周)应了解哪些内容? 为什么在CAD里画出来的矩形是虚线 怎么才能遮住手上的疤 Cad 中用多段线画虚线矩形怎么画 未成年生孩子能上户口吗 java的中间件tomcat可以配置分布式事务么? 小清新直播平台认证 父母离婚了未成年孩子户口可以单独立户吗? 未成年的孩子可以办独立的户口本吗? 目前APP市场中有没有小清新直播软件? 孩子未满18周岁,可以自己单独迁户口吗 为什么大部分的直播平台都被东北人承包 未成年,未婚生孩子能不能给孩子上户口 父母都还未成年如何给小孩上户口 为什么大部分的直播平台都被东北人承包? 未成年的小孩子可以单独上一个户口吗? 薛辉老师小清新抖音课程怎么样? 未成年所生子女能上户口吗? 父母离婚了未成年孩子户口可以单独立户吗 未成年未婚妈妈该如何给孩子上户口? 未成年人可以自己单独搞一个户口吗? 旗舰是什么意思 现未成年小孩户口能挂靠在直系亲属处吗 正新轮胎和正新玛吉斯有什么区别?