配置第一个datasource(Primary)
/** * Druid数据源配置 */ @Configuration @MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "sessionFactory",sqlSessionTemplateRef = "sqlSessionTemplate") public class DataSourceConfig { static final String PACKAGE = "com.a.b.test1"; private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceConfig.class); private static String dbUrl; private static String username; private static String password; private static String driverClassName; private static int initialSize; private static int minIdle; private static int maxActive; private static int maxWait; /** * 注册DruidServlet * * @return */ @Bean public ServletRegistrationBean druidServletRegistrationBean() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); return servletRegistrationBean; } /** * 注册DruidFilter拦截 * * @return */ @Bean public FilterRegistrationBean druidFilterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); Map<String, String> initParams = new HashMap<String, String>(); //设置忽略请求 initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"); filterRegistrationBean.setInitParameters(initParams); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } /** * 配置DataSource * @return * @throws SQLException */ @Bean(initMethod = "init",destroyMethod = "close") @Primary public DataSource dataSource() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setUsername(username); druidDataSource.setPassword(password); druidDataSource.setUrl(dbUrl); druidDataSource.setFilters("stat,wall"); druidDataSource.setInitialSize(initialSize); druidDataSource.setMinIdle(minIdle); druidDataSource.setMaxActive(maxActive); druidDataSource.setMaxWait(maxWait); druidDataSource.setUseGlobalDataSourceStat(true); druidDataSource.setDriverClassName(driverClassName); return druidDataSource; } @Bean(name = "transactionManager") @Primary public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) throws SQLException { return new DataSourceTransactionManager(dataSource); } @Bean(name = "sessionFactory") @Primary public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setTypeAliasesPackage("com.xxx.domain"); //添加mybatis配置文件 PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); // bean.setConfigLocation(resourceResolver.getResource("classpath:mybatis/config/mybatis-config.xml")); try { bean.setMapperLocations(resourceResolver.getResources("classpath:mybatis/mapper/*.xml")); return bean.getObject(); } catch (IOException e) { LOGGER.error("获取mapper资源出现异常",e); throw new RuntimeException("获取mapper资源出现异常",e); } catch (Exception e){ LOGGER.error("初始化sqlSessionFactory时出现异常",e); throw new RuntimeException("初始化sqlSessionFactory时出现异常",e); } } @Bean(name = "sqlSessionTemplate") @Primary public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } @Value("${spring.datasource.url}") public void setDbUrl(String dbUrl) { DataSourceConfig.dbUrl = dbUrl; } @Value("${spring.datasource.username}") public void setUsername(String username) { DataSourceConfig.username = username; } @Value("${spring.datasource.password}") public void setPassword(String password) { DataSourceConfig.password = password; } @Value("${spring.datasource.driver-class-name}") public void setDriverClassName(String driverClassName) { DataSourceConfig.driverClassName = driverClassName; } @Value(value = "${spring.datasource.initialSize}") public void setInitialSize(int initialSize) { DataSourceConfig.initialSize = initialSize; } @Value(value = "${spring.datasource.minIdle}") public void setMinIdle(int minIdle) { DataSourceConfig.minIdle = minIdle; } @Value(value = "${spring.datasource.maxActive}") public void setMaxActive(int maxActive) { DataSourceConfig.maxActive = maxActive; } @Value(value = "${spring.datasource.maxWait}") public void setMaxWait(int maxWait) { DataSourceConfig.maxWait = maxWait; } }
配置第二个datasource
@Configuration @MapperScan(basePackages = NewWindowsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "nwSessionFactory",sqlSessionTemplateRef = "nwSqlSessionTemplate") public class NewWindowsDataSourceConfig { static final String PACKAGE = "com.a.b.test2"; //本项目中用的是mybatis,此路径为扫描的mapper的包结构 private static final Logger LOGGER = LoggerFactory.getLogger(NewWindowsDataSourceConfig.class); private static String dbUrl; private static String username; private static String password; private static String driverClassName; private static int initialSize; private static int minIdle; private static int maxActive; private static int maxWait; /** * 注册DruidFilter拦截 * * @return */ @Bean public FilterRegistrationBean nwFilterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); Map<String, String> initParams = new HashMap<String, String>(); //设置忽略请求 initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"); filterRegistrationBean.setInitParameters(initParams); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } /** * 配置DataSource * @return * @throws SQLException */ @Bean(initMethod = "init",destroyMethod = "close") public DataSource nwDataSource() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setUsername(username); druidDataSource.setPassword(password); druidDataSource.setUrl(dbUrl); druidDataSource.setFilters("stat,wall"); druidDataSource.setInitialSize(initialSize); druidDataSource.setMinIdle(minIdle); druidDataSource.setMaxActive(maxActive); druidDataSource.setMaxWait(maxWait); druidDataSource.setUseGlobalDataSourceStat(true); druidDataSource.setDriverClassName(driverClassName); return druidDataSource; } @Bean(name = "nwTransactionManager") public DataSourceTransactionManager nwTransactionManager(@Qualifier("nwDataSource") DataSource nwDataSource) throws SQLException { return new DataSourceTransactionManager(nwDataSource()); } @Bean(name = "nwSessionFactory") public SqlSessionFactory nwSqlSessionFactory(@Qualifier("nwDataSource") DataSource nwDataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(nwDataSource); bean.setTypeAliasesPackage("com.xxx.domain"); //添加mybatis配置文件 PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); bean.setConfigLocation(resourceResolver.getResource("classpath:mybatis/config/mybatis-config.xml")); try { bean.setMapperLocations(resourceResolver.getResources("classpath:mybatis/mapper/*.xml")); return bean.getObject(); } catch (IOException e) { LOGGER.error("获取mapper资源出现异常",e); throw new RuntimeException("获取mapper资源出现异常",e); } catch (Exception e){ LOGGER.error("初始化sqlSessionFactory时出现异常",e); throw new RuntimeException("初始化sqlSessionFactory时出现异常",e); } } @Bean(name = "nwSqlSessionTemplate") public SqlSessionTemplate nwSqlSessionTemplate(@Qualifier("nwSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } @Value("${nw.datasource.url}") public void setDbUrl(String dbUrl) { NewWindowsDataSourceConfig.dbUrl = dbUrl; } @Value("${nw.datasource.username}") public void setUsername(String username) { NewWindowsDataSourceConfig.username = username; } @Value("${nw.datasource.password}") public void setPassword(String password) { NewWindowsDataSourceConfig.password = password; } @Value("${spring.datasource.driver-class-name}") public void setDriverClassName(String driverClassName) { NewWindowsDataSourceConfig.driverClassName = driverClassName; } @Value(value = "${spring.datasource.initialSize}") public void setInitialSize(int initialSize) { NewWindowsDataSourceConfig.initialSize = initialSize; } @Value(value = "${spring.datasource.minIdle}") public void setMinIdle(int minIdle) { NewWindowsDataSourceConfig.minIdle = minIdle; } @Value(value = "${spring.datasource.maxActive}") public void setMaxActive(int maxActive) { NewWindowsDataSourceConfig.maxActive = maxActive; } @Value(value = "${nw.datasource.maxWait}") public void setMaxWait(int maxWait) { NewWindowsDataSourceConfig.maxWait = maxWait; } }
注意@MapperScan的basePackages配置包路径不能有重叠,必须要区分开,否则会有其中一个datasource对应的Mybatis配置加载不到Mapper接口。
DruidServlet配置一个就行了
相关推荐
在Spring Boot应用中,配置多数据源是一项常见的需求,尤其对于那些需要同时连接不同数据库(如MySQL、Oracle等)的应用来说。Spring Boot以其简洁的配置和自动配置特性,使得这项任务变得相对简单。本文将详细讲解...
首先,我们需要在`pom.xml`或`build.gradle`文件中添加相应的Spring Boot数据源依赖,例如MySQL和Oracle: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-jpa <groupId>...
在Spring Boot 2框架中,实现多数据源的配置是一项重要的任务,特别是在大型企业级应用中,可能需要连接到不同的数据库来满足不同业务的需求。在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,...
总结来说,Spring Boot + JPA 的多数据源配置需要对Spring的配置机制有深入理解,包括自动配置、bean的创建、数据源的切换等。同时,合理组织实体类和数据库访问层,确保代码的可维护性和扩展性。这个名为`...
Spring Boot 配置多数据源代码实例详解 Spring Boot 框架在实际应用中经常需要连接多个数据源,以满足不同的业务需求。配置多数据源可以使得应用程序更加灵活和可靠。本文详细介绍了 Spring Boot 配置多数据源代码...
Spring Boot配置动态数据源访问多个数据库实现代码详解 通过Spring Boot配置动态数据源访问多个数据库可以实现数据库的动态增删和数量无限的支持,下面将详细介绍该实现代码的知识点。 数据源配置管理 在Spring ...
4. **配置多数据源**: 在Spring Boot中,可以通过配置不同的`@Configuration`类来设置多个数据源。每个数据源可以有自己的`DataSourceProperties`,并通过`@Bean`注解创建对应的`DataSource`实例。 5. **切换数据源...
在本教程中,我们将深入探讨如何在Spring Boot项目中配置和使用多数据源以及JdbcTemplate。 首先,让我们了解什么是`JdbcTemplate`。它是Spring提供的一种模板类,用于执行SQL语句,通过回调机制将结果转换为Java...
在Spring Boot应用中,使用`spring-data-jpa`来配置MySQL多数据源是一项常见的需求,尤其是在构建大型分布式系统时,为了实现数据隔离、负载均衡或读写分离等目的。本教程将详细介绍如何在Spring Boot项目中配置多个...
本篇文章将详细探讨如何在Spring Boot项目中配置多数据源,并利用注解进行数据源的自由切换,同时也会提及Druid连接池和MyBatis的使用。 首先,我们要理解“多数据源”是什么。多数据源意味着应用程序可以同时连接...
### Spring Boot多数据源配置详解 #### 一、引言 在实际的软件开发过程中,随着业务需求的多样化,单一的数据源已经无法满足所有场景的需求。例如,有时我们需要同时访问两个或更多的数据库来完成复杂的业务逻辑,...
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...
在Spring Boot中,我们可以利用其强大的自动配置能力来管理多个数据源。以下是一些关键步骤: 1. **配置数据源**:在`application.properties`或`application.yml`文件中,为每个数据源设置独立的配置。例如,可以...
本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据源的动态切换,帮助你理解和掌握这一核心技能。 首先,我们理解"多数据源"的概念。在SpringBoot应用中,多数据源意味着系统能够连接并操作多个不同的...
在Spring Boot应用中,多数据源的配置与管理是一项重要的任务,特别是在大型系统中,可能需要连接到不同的数据库以满足不同业务的需求。本教程将详细讲解如何在Spring Boot项目中集成Druid连接池,并利用AOP注解实现...
1. **配置多数据源**:Spring Boot通过`@ConfigurationProperties`注解可以轻松读取配置文件中的属性,并将其映射到Java对象中。在`application.yml`或`application.properties`中,我们需要定义两个或更多的数据源...
本资源针对的是Spring Boot动态多数据源和JTA(Java Transaction API)分布式事务的实现,对于初学者来说非常实用。下面我们将深入探讨这些知识点。 首先,让我们了解一下Spring Boot的多数据源。在许多业务场景下...
在Spring Boot应用中,多数据源配置是一项重要的技术实践,特别是在大型系统中,可能需要连接到多个数据库以实现数据隔离、读写分离或是分布式事务管理。Spring Boot以其强大的自动化配置能力,使得设置多数据源变得...
本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...
《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...