在spring中配置多个数据源,并实现动态切换
朋友遇到的问题,整理好了,我觉得不错,贴出来分享下。
spring中xml文件中的配置:
<bean id="dataSource1"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="jdbcUrl"><value>jdbc:oracle:thin:@127.0.0.1:1521:ORACLE</value></property>
<property name="user"><value>htctposp</value></property>
<property name="password"><value>htctposp</value></property>
<property name="minPoolSize"><value>1</value></property>
<property name="maxPoolSize"><value>5</value></property>
<property name="maxIdleTime"><value>1800</value></property>
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mysql?characterEncoding=UTF8"></property>
<property name="username" value="root"></property>
<property name="password" value="1111"></property>
</bean>
<bean id="dataSource" class="com.huateng.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="dataSource1" value-ref="dataSource1"/>
<entry key="dataSource2" value-ref="dataSource2"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1"/>
</bean>
写两个工具类DbContextHolder和DynamicDataSource,如下:
public class DynamicDataSource extends AbstractRoutingDataSource{
static Logger log=Logger.getLogger("DynamicDataSource");
/* (non-Javadoc)
* @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLookupKey()
*/
protected Object determineCurrentLookupKey() {
// DbContextHolder.setDbType("2");
return DbContextHolder.getDbType();
}
}
public class DbContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void setDbType(String dbType){
contextHolder.set(dbType);
}
public static String getDbType(){
return (String)contextHolder.get();
}
public static void clearDbType(){
contextHolder.remove();
}
}
一般在调用service层之前就要切换数据库(一般要在action中),切换数据库的代码:
DbContextHolder.setDbType("dataSource2");
分享到:
相关推荐
总结来说,SpringBoot实现多数据源和动态切换的关键在于正确配置多个数据源,创建自定义的AOP切面和ThreadLocal上下文。在实际项目中,还需要考虑事务管理、异常处理等复杂情况,确保数据的一致性和安全性。通过理解...
1. **配置多数据源**:Spring Boot提供了DataSourceAutoConfiguration,它允许我们配置多个数据源。每个数据源可以有自己的配置,如JDBC连接池、数据库驱动、URL、用户名和密码等。我们可以使用@...
1. **配置Spring**:首先,我们需要在Spring的配置文件中声明多个数据源。这些数据源可以是JDBC的DataSource实例,如Apache的DBCP或C3P0。每个数据源都有其特定的数据库连接信息,例如URL、用户名和密码。 ```xml ...
- **配置文件**(yml格式):在application.yml中配置多个数据源的信息,使用`spring.datasource.druid`作为根路径,为每个数据源设置不同的路径,例如`db1`和`db2`。每个数据源下配置包括数据库类型、驱动类名、...
"Spring动态切换多数据源Demo"是一个示例项目,它展示了如何在Spring中实现灵活的数据源切换。 首先,我们需要了解Spring中的数据源。在Spring中,数据源(DataSource)是Java中定义的javax.sql.DataSource接口的...
在Spring框架中,配置多个数据源并实现动态切换是一项常见的需求,特别是在大型系统中,可能需要连接到不同的数据库以满足不同业务场景的需求。本篇文章将详细介绍如何在Spring中配置两个不同的数据源,并实现它们...
1. 定义数据源配置:创建多个DataSource配置,每个数据源对应不同的数据库连接信息。 2. 使用Spring的AbstractRoutingDataSource作为基础数据源,它可以动态决定当前请求应使用哪个数据源。在运行时,...
- `DataSourceConfig.java`:配置类,创建和管理多个数据源。 - `DynamicDataSourceRouter.java`:实现动态数据源路由,定义选择数据源的规则。 - `Service`和`Repository`层:在业务逻辑中使用动态数据源。 6. ...
在Spring Boot应用中,多数据源的配置与管理是一项重要的任务,特别是在大型系统中,可能需要连接到不同的...在实际项目中,你可能还需要考虑事务管理、数据源切换的异常处理等问题,确保整个系统的稳定性和一致性。
本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...
在实际应用中,我们需要在Spring Boot的配置文件(`application.yml`或`application.properties`)中定义多个数据源,然后在`@Configuration`类中配置`DynamicDataSource`,使其能够根据业务逻辑动态选择数据源。...
在SpringBoot项目中,整合Mybatis-Plus并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...
3. **数据源配置**:MyBatis同样需要配置多个数据源,可以通过自定义SqlSessionFactoryBean和SqlSessionTemplate来实现。 4. **动态数据源切换**:对于MyBatis,可以在SqlSessionTemplate中设置数据源,或者使用`@...
首先,在项目的`application.properties`文件中配置两个数据源:Oracle和MySQL。 ```properties # Oracle数据源配置 jdbc.driver=oracle.jdbc.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:dev jdbc....
本文将深入探讨如何在 Spring 中配置和管理多个数据源,并实现动态切换。 首先,我们需要理解“多数据源”是什么。它是指在一个应用中同时连接并操作多个不同的数据库,这些数据库可能具有不同的结构,服务于不同的...
在多数据源场景下,SpringBoot允许我们配置多个数据源,这在分布式系统或者数据库分片场景中非常实用。 Atomikos是一个开源的事务管理器,它实现了Java Transaction API (JTA),支持全局事务处理。在分布式系统中,...
在Spring框架中,动态切换数据源是一项重要的功能,它允许应用程序根据业务需求在多个数据库之间灵活切换。这一特性对于多租户系统、读写分离、分布式数据库等场景尤其有用。以下将详细介绍如何实现Spring的动态数据...
在Spring框架中,管理多个数据源是一项常见的任务,特别是在大型分布式系统中,可能需要连接到不同的数据库以实现数据隔离或优化性能。这篇博客主要探讨了如何在Spring中配置和管理多个数据源,以便灵活地处理不同的...
在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....