前言
本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考学习,下面来看看详细的介绍:
实现方法:
数据源在配置文件中的配置
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<pre name= "code" class = "java" ><?xml version= "1.0" encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:aop= "http://www.springframework.org/schema/aop"
xmlns:cache= "http://www.springframework.org/schema/cache"
xmlns:context= "http://www.springframework.org/schema/context"
xmlns:jdbc= "http://www.springframework.org/schema/jdbc" xmlns:jee= "http://www.springframework.org/schema/jee"
xmlns:jms= "http://www.springframework.org/schema/jms" xmlns:lang= "http://www.springframework.org/schema/lang"
xmlns:mvc= "http://www.springframework.org/schema/mvc" xmlns:oxm= "http://www.springframework.org/schema/oxm"
xmlns:p= "http://www.springframework.org/schema/p" xmlns:task= "http://www.springframework.org/schema/task"
xmlns:tx= "http://www.springframework.org/schema/tx" xmlns:util= "http://www.springframework.org/schema/util"
xsi:schemaLocation="http: //www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http: //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http: //www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
http: //www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http: //www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http: //www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http: //www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.1.xsd
http: //www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.1.xsd
http: //www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http: //www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd
http: //www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
http: //www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http: //www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<context:annotation-config />
<context:component-scan base- package = "com" ></context:component-scan>
<bean class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
<property name= "locations" >
<list>
<value>classpath:com/resource/config.properties</value>
</list>
</property>
</bean>
<bean id= "dataSourceOne" class = "com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method= "close" >
<property name= "driverClass" value= "${dbOne.jdbc.driverClass}" />
<property name= "jdbcUrl" value= "${dbOne.jdbc.url}" />
<property name= "user" value= "${dbOne.jdbc.user}" />
<property name= "password" value= "${dbOne.jdbc.password}" />
<property name= "initialPoolSize" value= "${dbOne.jdbc.initialPoolSize}" />
<property name= "minPoolSize" value= "${dbOne.jdbc.minPoolSize}" />
<property name= "maxPoolSize" value= "${dbOne.jdbc.maxPoolSize}" />
</bean>
<bean id= "dataSourceTwo" class = "com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method= "close" >
<property name= "driverClass" value= "${dbTwo.jdbc.driverClass}" />
<property name= "jdbcUrl" value= "${dbTwo.jdbc.url}" />
<property name= "user" value= "${dbTwo.jdbc.user}" />
<property name= "password" value= "${dbTwo.jdbc.password}" />
<property name= "initialPoolSize" value= "${dbTwo.jdbc.initialPoolSize}" />
<property name= "minPoolSize" value= "${dbTwo.jdbc.minPoolSize}" />
<property name= "maxPoolSize" value= "${dbTwo.jdbc.maxPoolSize}" />
</bean>
<bean id= "dynamicDataSource" class = "com.core.DynamicDataSource" >
<property name= "targetDataSources" >
<map key-type= "java.lang.String" >
<entry value-ref= "dataSourceOne" key= "dataSourceOne" ></entry>
<entry value-ref= "dataSourceTwo" key= "dataSourceTwo" ></entry>
</map>
</property>
<property name= "defaultTargetDataSource" ref= "dataSourceOne" >
</property>
</bean>
<bean id= "sessionFactory" class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
<property name= "dataSource" ref= "dynamicDataSource" />
<property name= "hibernateProperties" >
<props>
<prop key= "hibernate.dialect" >org.hibernate.dialect.MySQLDialect</prop>
<prop key= "hibernate.current_session_context_class" >org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key= "hibernate.show_sql" > false </prop>
<prop key= "hibernate.format_sql" > true </prop>
<prop key= "hbm2ddl.auto" >create</prop>
</props>
</property>
<property name= "packagesToScan" >
<list>
<value>com.po</value>
</list>
</property>
</bean>
<bean id= "transactionManager" class = "org.springframework.orm.hibernate4.HibernateTransactionManager" >
<property name= "sessionFactory" ref= "sessionFactory" />
</bean>
<aop:config>
<aop:pointcut id= "transactionPointCut" expression= "execution(* com.dao..*.*(..))" />
<aop:advisor advice-ref= "txAdvice" pointcut-ref= "transactionPointCut" />
</aop:config>
<tx:advice id= "txAdvice" transaction-manager= "transactionManager" >
<tx:attributes>
<tx:method name= "add*" propagation= "REQUIRED" />
<tx:method name= "save*" propagation= "REQUIRED" />
<tx:method name= "update*" propagation= "REQUIRED" />
<tx:method name= "delete*" propagation= "REQUIRED" />
<tx:method name= "*" read-only= "true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:aspect id= "dataSourceAspect" ref= "dataSourceInterceptor" >
<aop:pointcut id= "daoOne" expression= "execution(* com.dao.one.*.*(..))" />
<aop:pointcut id= "daoTwo" expression= "execution(* com.dao.two.*.*(..))" />
<aop:before pointcut-ref= "daoOne" method= "setdataSourceOne" />
<aop:before pointcut-ref= "daoTwo" method= "setdataSourceTwo" />
</aop:aspect>
</aop:config>
</beans>
|
DynamicDataSource.class
?
1
2
3
4
5
6
7
8
9
10
11
12
|
package com.core;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource{
@Override
protected Object determineCurrentLookupKey() {
return DatabaseContextHolder.getCustomerType();
}
}
|
DatabaseContextHolder.class设置数据源的类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.core;
public class DatabaseContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
<span style= "white-space:pre" > </span> //设置要使用的数据源
public static void setCustomerType(String customerType) {
contextHolder.set(customerType);
}
<span style= "white-space:pre" > </span> //获取数据源
public static String getCustomerType() {
return contextHolder.get();
}
<span style= "white-space:pre" > </span> //清除数据源,使用默认的数据源
public static void clearCustomerType() {
contextHolder.remove();
}
}
|
DataSourceInterceptor.class
?
1
2
3
4
5
6
7
8
9
10
11
12
|
package com.core;
import org.aspectj.lang.JoinPoint;
import org.springframework.stereotype.Component;
@Component
public class DataSourceInterceptor {
<span style= "white-space:pre" > </span> //数据源1
public static final String SOURCE_PLAN = "<span style=" font-family: Arial, Helvetica, sans-serif; ">dataSourceOne</span><span style=" font-family: Arial, Helvetica, sans-serif; ">" ;</span>
//数据源2
<pre name= "code" class = "java" ><span style= "white-space:pre" > </span> public static final String SOURCE_FUND = "<span style=" font-family: Arial, Helvetica, sans-serif; ">dataSourceTwo</span>" ;
}
|
springMVC数据源
?
1
2
|
jdbc_driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
<pre name= "code" class = "java" >dataSourceOne<span style= "font-family: Arial, Helvetica, sans-serif;" >=jdbc:sqlserver: //115.29.***.**;DatabaseName=DB_GuiHua</span>
|
jdbc_username=**jdbc_password=**
?
1
|
dataSourceTwo<span style= "font-family: Arial, Helvetica, sans-serif;" >=jdbc:sqlserver: //115.29.***.*;DatabaseName=DB_Fund</span>
|
Spring MVC会默认有一个数据源,当需要更换数据源时,要在调用事务之前配置
?
1
|
DataSourceContextHolder.setDbType(DataSourceType.SOURCE_FUND); //更换数据源
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/**
* @ClassName: DataSourceContextHolder
* @Description: 数据库切换工具类
* @author: wzx
* @date: 2016-07-27 上午10:26:01
*/
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return ((String) contextHolder.get());
}
public static void clearDbType() {
contextHolder.remove();
}
}
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。
原文链接:http://blog.csdn.net/a347911/article/details/52055070
相关文章
猜你喜欢
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 41
-
2025-05-25 94
-
2025-05-29 57
-
利用VS2025创建Web项目,并发送到IIS,以及IIS与ASP.NET配置
2025-05-29 18 -
2025-06-04 97
热门评论