配置第一个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+mybatis
一个springboot的多数据配置,从mapper到controller完整的一个业务流程
spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码。代码拿过去即可集成使用。
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
主要介绍了通过Spring Boot配置动态数据源访问多个数据库的实现代码,需要的朋友可以参考下
主要介绍了Spring boot配置多数据源代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...
Spring Boot Mybatis 多数据源配置、Mybatis通用插件、MyBatis分页插件配置。
spring-boot2.0多数据源 下载直接可以使用。支持扩展多个数据库。动态切换数据库
本项目为“基于Java和Spring Boot的多数据源切换设计源码”,包含87个文件,其中包括69个Java源文件、9个XML配置文件、2个Markdown文档、2个YAML配置文件、1个Gitignore忽略配置文件、1个Dockerfile文件、1个...
基于maven的spring-boot项目配置多数据源,基于xml配置文件配置多数据源
通过简单的demo实现SpingBoot多数据源配置并动态切换多数据源
spring boot mybatis多数据源最简解决方案,说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。
STS下spring boot、mybatis多数据源配置源码工程
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
spring-boot多数据源配置示例
解压后有资源文件和说明文件 需要创建两个数据库 名字为: familymonitor_v2 和 orderpayment ... 表tb_coupon_info 在数据库orderpayment 中 ...环境为 spring boot mybatis +多数据源 demosql.sql为数据库建表语句
spring boot mybatis plus 多数据源切换的demo解压运行
spring boot整合druid连接池,采用注解方式实现多数据源动态切换 jdk版本1.8 spring boot版本1.5.14