微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring boot多数据源动态切换代码实例

这篇文章主要介绍了spring boot多数据源动态切换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了spring boot多数据源动态切换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

当项目中存在多数据源时,就涉及到数据源的动态切换,通过研究,特此记录一下。

1、maven依赖

com.oracleojdbc611.2.0.4runtime com.alibaba druid-spring-boot-starter 1.1.10 org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-aop

2、多数据源信息配置

#多数据源测试 spring: datasource: druid: master: driver-class-name: oracle.jdbc.driver.OracleDriver username: test password: test url: jdbc:oracle:thin:@//ip1:1521/orcl slave: driver-class-name: oracle.jdbc.driver.OracleDriver username: test password: test url: jdbc:oracle:thin:@//ip2:1521/orcl

3、数据源配置信息转换成实体类

@ConfigurationProperties(prefix = "spring.datasource.druid") @Data @Component public class DataSourceProperties { private Mapmaster; private Mapslave; }

4、动态数据源切换类

public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal contextHolder = new ThreadLocal(); public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) { super.setDefaultTargetDataSource(defaultTargetDataSource); super.setTargetDataSources(targetDataSources); super.afterPropertiesSet(); } @Override protected Object determineCurrentLookupKey() { return getDataSource(); } public static void setDataSource(String dataSource) { contextHolder.set(dataSource); } public static String getDataSource() { return contextHolder.get(); } public static void clearDataSource() { contextHolder.remove(); } }

5、多数据源配置类

@Configuration public class DynamicDataSourceConfig { @Bean public DataSource master(@Autowired DataSourceProperties dataSourceProperties){ DruidDataSource druidDataSource = new DruidDataSource(); Map master = dataSourceProperties.getMaster(); druidDataSource.setUsername(master.get("username")); druidDataSource.setPassword(master.get("password")); druidDataSource.setUrl(master.get("url")); //其他参数配置 省略 return druidDataSource; } @Bean public DataSource slave(@Autowired DataSourceProperties dataSourceProperties){ DruidDataSource druidDataSource = new DruidDataSource(); Map slave = dataSourceProperties.getSlave(); druidDataSource.setUsername(slave.get("username")); druidDataSource.setPassword(slave.get("password")); druidDataSource.setUrl(slave.get("url")); //其他参数配置 省略 return druidDataSource; } @Bean @Primary public DynamicDataSource dataSource(DataSource master,DataSource slave){ Mapmap = new HashMap(4); map.put("master",master); map.put("slave",slave); return new DynamicDataSource(master,map); } }

6、自定义@DataSource注解

@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface DataSource { String name() default "master"; }

7、Aop切面类配置

@Component @Aspect public class DataSourceAspect { @pointcut("@annotation(com.zxgeo.sso.muiltDatasource.anons.DataSource)") public void dataSourcepointcut(){} @Around(value = "dataSourcepointcut()") public Object around(ProceedingJoinPoint point) throws Throwable { MethodSignature signature = (MethodSignature) point.getSignature(); Method method = signature.getmethod(); DataSource dataSource = method.getAnnotation(DataSource.class); if(dataSource == null){ DynamicDataSource.setDataSource("master"); }else { DynamicDataSource.setDataSource(dataSource.name()); } try { return point.proceed(); } finally { DynamicDataSource.clearDataSource(); } } }

8、启动配置注解信息,重要(不然运行会报错)

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

9、测试

(1)、service层(此处没有使用mybatis)

@Service public class TestService { @Autowired private javax.sql.DataSource dataSource; @DataSource public Map getMasterDataSource() throws sqlException { Connection connection = dataSource.getConnection(); Map map; try (PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM AA WHERE A=10001")) { ResultSet resultSet = preparedStatement.executeQuery(); map = new HashMap(); while (resultSet.next()){ map.put("A",resultSet.getString("A")); map.put("B",resultSet.getString("B")); map.put("C",resultSet.getString("C")); } } return map; } @DataSource(name = "slave") public Map getSlaveDataSource() throws sqlException { Connection connection = dataSource.getConnection(); Map map; try (PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM AA WHERE A=10002")) { ResultSet resultSet = preparedStatement.executeQuery(); map = new HashMap(); while (resultSet.next()){ map.put("A",resultSet.getString("A")); map.put("B",resultSet.getString("B")); map.put("C",resultSet.getString("C")); } } return map; } }

(2)、单元测试

@SpringBoottest @RunWith(springrunner.class) class SsoApplicationTests { @Autowired private TestService testService; @Test public void muliDatasorce() throws sqlException { Map masterDataSourceUrl = testService.getMasterDataSource(); System.out.println(masterDataSourceUrl); Map slaveDataSourceUrl = testService.getSlaveDataSource(); System.out.println(slaveDataSourceUrl); } }

(3)、结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

您可能感兴趣的文章:Spring Boot 动态数据源示例(多数据源自动切换)spring boot + mybatis实现动态切换数据源实例代码SpringBoot Mybatis动态数据源切换方案实现过程spring boot动态切换数据源的实现详细聊聊SpringBoot中动态切换数据源的方法

上一篇:java实现图片滑动验证(包含前端代码)下一篇:Java--Socket通信(客户端服务端双向) 热门搜索

多数据源动态切换 

动态数据源切换 

多数据源切换 

动态数据源 

Spring boot 

相关文章

spring boot多数据源动态切换代码实例

2021-10-20阅读(3964)评论(0)推荐()

这篇文章主要介绍了spring boot多数据源动态切换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

Spring Boot 动态数据源示例(多数据源自动切换)

2021-10-18阅读(7443)评论(0)推荐()

本篇文章主要介绍了Spring Boot 动态数据源示例(多数据源自动切换),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Spring整合多数据源实现动态切换的实例讲解

2021-10-18阅读(8991)评论(0)推荐()

下面小编就为大家带来一篇Spring整合多数据源实现动态切换的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

通过Spring Boot配置动态数据源访问多个数据库的实现代码

2021-10-12阅读(8577)评论(0)推荐()

这篇文章主要介绍了通过Spring Boot配置动态数据源访问多个数据库的实现代码,需要的朋友可以参考下

spring boot+mybatis 多数据源切换(实例讲解)

2021-11-05阅读(3440)评论(0)推荐()

下面小编就为大家带来一篇spring boot+mybatis 多数据源切换(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来...

Spring Boot + Mybatis 实现动态数据源案例分析

2021-11-21阅读(5210)评论(0)推荐()

这篇文章主要介绍了Spring Boot + Mybatis 实现动态数据源,需要的朋友可以参考下

springboot中mybatis多数据源动态切换实现

2021-11-13阅读(5240)评论(0)推荐()

在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面。这里给出一个动态数据源的配置方案,感兴趣的可以了解一下

取消

有人回复邮件通知

提交评论

© 2021 编程之家 

工信部备案号:琼ICP备2022000316号

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐