- 浏览: 853836 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
[代码] DbContextHolder
01 |
public class DbContextHolder {
|
02 |
//线程安全的ThreadLocal
|
03 |
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
|
04 |
|
05 |
public static void setDbType(String dbType) {
|
06 |
contextHolder.set(dbType);
|
07 |
}
|
08 |
|
09 |
public static String getDbType() {
|
10 |
return ((String)contextHolder.get());
|
11 |
}
|
12 |
public static void clearDbType() {
|
13 |
contextHolder.remove();
|
14 |
}
|
15 |
|
16 |
} |
[代码] DynamicDataSource
01 |
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
|
02 |
|
03 |
public class DynamicDataSource extends AbstractRoutingDataSource {
|
04 |
|
05 |
@Override
|
06 |
public Object determineCurrentLookupKey() {
|
07 |
return DbContextHolder.getDbType();
|
08 |
}
|
09 |
|
10 |
} |
[代码] spring.xml
01 |
<!-- 数据源属性配置文件 --> |
02 |
<context:property-placeholder location= "classpath:ibatis.properties" />
|
03 |
|
04 |
|
05 |
<bean id= "jksh" class = "org.apache.commons.dbcp.BasicDataSource"
|
06 |
destroy-method= "close" >
|
07 |
<!-- Connection Info -->
|
08 |
<property name= "driverClassName" value= "${driver.jksh}" />
|
09 |
<property name= "url" value= "${url.jksh}" />
|
10 |
<property name= "username" value= "${username.jksh}" />
|
11 |
<property name= "password" value= "${password.jksh}" />
|
12 |
|
13 |
<!-- Connection Pooling Info -->
|
14 |
<property name= "maxIdle" value= "${maxIdle.jksh}" />
|
15 |
<property name= "maxActive" value= "${maxActive.jksh}" />
|
16 |
<property name= "defaultAutoCommit" value= "false" />
|
17 |
<property name= "timeBetweenEvictionRunsMillis"
|
18 |
value= "${timeBetweenEvictionRunsMillis.jksh}" />
|
19 |
<property name= "minEvictableIdleTimeMillis" value= "${minEvictableIdleTimeMillis.jksh}" />
|
20 |
</bean>
|
21 |
|
22 |
<bean id= "jclt" class = "org.apache.commons.dbcp.BasicDataSource"
|
23 |
destroy-method= "close" >
|
24 |
<!-- Connection Info -->
|
25 |
<property name= "driverClassName" value= "${driver.jclt}" />
|
26 |
<property name= "url" value= "${url.jclt}" />
|
27 |
<property name= "username" value= "${username.jclt}" />
|
28 |
<property name= "password" value= "${password.jclt}" />
|
29 |
|
30 |
<!-- Connection Pooling Info -->
|
31 |
<property name= "maxIdle" value= "${maxIdle.jclt}" />
|
32 |
<property name= "maxActive" value= "${maxActive.jclt}" />
|
33 |
<property name= "defaultAutoCommit" value= "false" />
|
34 |
<property name= "timeBetweenEvictionRunsMillis" value= "${timeBetweenEvictionRunsMillis.jclt}" />
|
35 |
<property name= "minEvictableIdleTimeMillis" value= "${minEvictableIdleTimeMillis.jclt}" />
|
36 |
</bean>
|
37 |
|
38 |
|
39 |
<bean id= "dataSource" class = "com.jclt.service.commons.DynamicDataSource" >
|
40 |
<property name= "targetDataSources" >
|
41 |
<map key-type= "java.lang.String" >
|
42 |
<entry key= "jksh" value-ref= "jksh" />
|
43 |
<entry key= "jclt" value-ref= "jclt" />
|
44 |
</map>
|
45 |
</property>
|
46 |
<property name= "defaultTargetDataSource" ref= "jksh" />
|
47 |
</bean>
|
[代码] main方法
01 |
import javax.sql.DataSource;
|
02 |
|
03 |
import org.springframework.context.ApplicationContext;
|
04 |
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
05 |
import org.springframework.core.io.FileSystemResource;
|
06 |
import org.springframework.core.io.Resource;
|
07 |
|
08 |
import com.jclt.service.commons.DbContextHolder;
|
09 |
import com.jclt.service.model.User;
|
10 |
|
11 |
import org.apache.ibatis.session.SqlSession;
|
12 |
import org.apache.ibatis.session.SqlSessionFactory;
|
13 |
import org.mybatis.spring.SqlSessionFactoryBean;
|
14 |
|
15 |
public class Text {
|
16 |
|
17 |
/**
|
18 |
* @param args
|
19 |
*/
|
20 |
public static void main(String[] args) {
|
21 |
ApplicationContext appContext = new ClassPathXmlApplicationContext( "client-beans.xml" );
|
22 |
|
23 |
DbContextHolder.setDbType( "jclt" );
|
24 |
String res= "src/main/resources/ibatis-config.xml" ;
|
25 |
DataSource datasource=(DataSource) appContext.getBean( "dataSource" );
|
26 |
|
27 |
SqlSessionFactoryBean bean= new SqlSessionFactoryBean();
|
28 |
bean.setDataSource(datasource);
|
29 |
Resource resource= new FileSystemResource(res);
|
30 |
bean.setConfigLocation(resource);
|
31 |
try {
|
32 |
SqlSessionFactory sessionfactory = bean.getObject();
|
33 |
SqlSession session=sessionfactory.openSession();
|
34 |
User user=session.selectOne( "com.jclt.service.Dao.readJKSH.findOne" );
|
35 |
System.out.println(user.getName());
|
36 |
} catch (Exception e) {
|
37 |
e.printStackTrace();
|
38 |
}
|
39 |
|
40 |
DbContextHolder.setDbType( "jksh" );
|
41 |
String res1= "src/main/resources/ibatis-config.xml" ;
|
42 |
DataSource datasource1=(DataSource) appContext.getBean( "dataSource" );
|
43 |
|
44 |
SqlSessionFactoryBean bean1= new SqlSessionFactoryBean();
|
45 |
bean1.setDataSource(datasource1);
|
46 |
Resource resource1= new FileSystemResource(res1);
|
47 |
bean1.setConfigLocation(resource1);
|
48 |
|
49 |
try {
|
50 |
SqlSessionFactory sessionfactory = bean.getObject();
|
51 |
SqlSession session=sessionfactory.openSession();
|
52 |
User user=session.selectOne( "com.jclt.service.Dao.readJKSH.findOne" );
|
53 |
System.out.println(user.getName());
|
54 |
} catch (Exception e) {
|
55 |
e.printStackTrace();
|
56 |
}
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
}
|
62 |
|
63 |
} |
发表评论
-
jackson annotations注解详解
2015-01-13 11:34 18997官方WIKI:https://github.com/Fast ... -
关于hibernate 、ibatis、jdbctemplate对Bbasedao的封装已经使用方式
2014-06-05 16:20 1521/********************* ... -
ibatis常用16条SQL语句
2014-04-30 09:28 717(1) 输入参数为单个值 ... -
SpringMVC3.0+MyIbatis3.0(分页示例)
2013-10-30 17:24 2226参考资料 1 ibatis2.x与mybatis ... -
Ehcache 整合Spring 使用页面、对象缓存
2012-11-02 19:56 1110Ehcache在很多项目中都出现过,用法也比较简 ... -
Spring 3.1 M1 中的缓存功能
2012-11-02 19:26 830本文转自:http://www.oschina.net/ ... -
深入剖析Spring Web源码(八) - 处理器映射,处理器适配器以及处理器的实现 - 基于简单控制器流程的实现
2012-10-31 13:37 13301.1.1.1 ... -
spring 源码 阅读 笔记 之 HandlerMapping
2012-10-31 12:59 1678SpringCVSBeanHTMLAnt ... -
spring mvc重复提交拦截器方法
2012-10-31 11:37 9018import javax.servlet.http.HttpS ... -
不重复配置——利用Spring通用化配置
2012-10-17 09:40 982还记得 如下这种配置吗: 1、struts2作用域 ... -
Ehcache 整合Spring 使用页面、对象缓存
2012-10-16 09:44 789Ehcache在很多项目中都出现过,用法也比较简单。一般的 ... -
SpringMVC文件上传 多文件
2012-10-15 17:27 7088必须明确告诉DispatcherServlet如何处理Mult ... -
Spring MVC 3.1新特性 生产者、消费者请求限定
2012-10-12 11:50 11516.6.5、生产者、消费者限定 6.6.5.1、基本概念 ... -
spring MVC 文件上传
2012-10-06 10:03 2073spring支持在网络应用程序处理文件上传,提供拔插的org. ... -
JasperReport与spring集成的三种方式
2012-09-26 17:29 1863最近要用JasperReport,试着和sprin ... -
Spring MVC+Jasper Report 及生成PDF的中文问题
2012-09-26 17:10 2先说两句报表框架的选择,JasperRepor ... -
Springmvc与jasperreport结合生成报表的一种方法
2012-09-26 16:42 1<script type="text/ja ... -
spring 3.1中的cache小结
2012-09-22 23:27 1017spring 3.1中有cache了,下 ... -
Ibatis中$与#的区别
2012-09-08 08:58 795iBATISSQL 在Ibatis中我们使用Sq ... -
Mybatis 3.1中 Mapper XML 文件 的学习详解
2012-09-08 08:58 1257MyBatis 真正的力量是在映射语句中。这 ...
相关推荐
在多数据源配置中,Spring能够帮助管理不同的数据源,通过配置bean来切换和控制数据源的使用。 **SpringMVC** 是Spring框架的一部分,专为Web开发设计。它简化了模型-视图-控制器(Model-View-Controller,MVC)的...
8. **测试**:在名为`test`的文件中,可能包含了单元测试或集成测试代码,用于验证多数据源切换和读写分离的正确性。测试用例应该覆盖各种读写操作,确保在不同数据源间的切换无误。 理解并掌握这些知识点,开发者...
总之,Spring+MyBatis多数据源配置是大型项目中常见的需求,它通过`AbstractRoutingDataSource`实现了动态数据源选择,结合MyBatis的Mapper接口和注解,可以方便地在多个数据库之间切换,从而满足复杂的数据库访问...
"spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目"是针对这种需求的一个解决方案,旨在提供一种灵活且动态的数据源切换机制。 首先,Spring框架作为Java领域中最受欢迎的应用框架之一,其强大...
在企业级应用开发中,Spring、...具体实现时,可以根据项目需求选择合适的方式进行数据源切换,以达到优化性能、提高可扩展性的目的。通过合理配置和设计,可以有效地管理和利用多数据源,提升系统的灵活性和可靠性。
综上所述,通过Spring Boot、Mybatis和Druid,我们可以灵活地管理多个数据库,实现数据源的动态切换。在实际项目中,这有助于提高系统的灵活性和可扩展性。多数据源配置对于处理分布式系统、读写分离、数据库分片等...
3. **配置数据源切换**:Spring的`AbstractRoutingDataSource`可以帮助我们实现数据源的动态切换。这个类会根据某种规则(如ThreadLocal、请求参数等)选择当前操作的数据源。 4. **配置Mybatis**:对于每个数据源...
总结,Spring Boot结合Mybatis和Druid实现多数据源配置的过程包括:配置数据源、配置Mybatis、创建数据源切换器、以及针对不同数据库的测试。这一过程涉及了Spring Boot的自动配置、依赖注入、配置属性绑定等多个...
`SpringBoot`、`MyBatis` 和 `HikariCP` 的结合是目前广泛采用的一种高效、灵活的解决方案,特别是对于处理多数据源场景。这个项目组合利用了它们各自的优势,减少了开发人员的工作量,提高了系统的性能。 首先,`...
1. 数据源切换的性能:避免在高并发情况下频繁进行数据源切换,以减少性能损耗。 2. 事务一致性:确保跨数据源的事务能够正确提交或回滚,可能需要借助于分布式事务解决方案。 3. 监控和日志:对每个数据源的使用...
总的来说,这个"spring+mybatis 数据路由源代码"项目提供了一种灵活的方式来处理多数据源的场景,允许开发者根据业务需求定制数据路由策略,提高了系统的可扩展性和可用性。对于需要处理大量并发读写操作的系统来说...
spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...
Spring Boot通过`@EnableAutoConfiguration`注解自动配置了大量常见服务,包括数据源和MyBatis的配置。然而,当涉及到多个数据源时,我们需要手动进行一些配置。 1. **配置双数据源** - 首先,为每个数据源创建一...
综上所述,这个项目通过SpringBoot、Gradle和MyBatis,实现了一个支持多数据源动态切换的应用。开发者可以利用AOP在运行时根据业务逻辑选择合适的数据源,提高了系统的灵活性和可扩展性。同时,Gradle的使用使得依赖...
最后,为了在代码中选择使用哪个数据源,我们可以利用 Spring 的 AOP(面向切面编程)来实现动态数据源切换。创建一个名为 `DynamicDataSource` 的类,实现 `AbstractRoutingDataSource`: ```java @Configuration ...
本项目“Spring+SpringMVC+Mybatis动态链接多数据源”旨在实现一个灵活、可扩展的数据源切换机制,以适应复杂的业务场景。 Spring框架作为Java领域中最广泛使用的轻量级框架,它提供了强大的依赖注入和AOP(面向切...
"Mybatis+Spring+SpringMVC+quartz多数据源切换"的架构设计就是为了满足这样的场景。这个项目结合了四个关键的技术组件,它们分别是Mybatis、Spring、SpringMVC和Quartz,下面将详细介绍这些技术以及它们在多数据源...
在现代企业级应用开发中,...通过灵活的配置和智能的路由策略,开发者可以轻松地处理复杂的数据源切换需求,提升系统的健壮性和可扩展性。实践这个示例,将进一步加深对Spring Boot和MyBatis在实际开发中的理解和运用。
在Spring+Mybatis框架中,实现多个数据源的调用是一项常见的需求,特别是在大型系统或者分布式环境中,可能需要连接不同的数据库来处理不同的业务数据。以下是一个详细的多数据源配置和使用的指南。 首先,我们需要...