springcloud多数据源配置
生活随笔
收集整理的這篇文章主要介紹了
springcloud多数据源配置
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.修改配置文件
spring: datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:click:# 從數(shù)據(jù)源開關(guān)/默認(rèn)關(guān)閉driverClassName: ru.yandex.clickhouse.ClickHouseDriverurl: jdbc:clickhouse://127.0.0.1:8123/testusername: rootpassword: 123456initialSize: 10maxActive: 100minIdle: 10maxWait: 6000mysql:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 1234562.修改主運(yùn)行類添加注解
@Import({DynamicDataSourceConfig.class}) @SpringBootApplication(exclude={DataSourceAutoConfiguration.class, DataSourceHealthContributorAutoConfiguration.class})3.創(chuàng)建相關(guān)配置文件
@Documented @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface DataSource {DataSourceType value() default DataSourceType.MYSQL; } @Aspect @Component public class DataSourceAspect implements Ordered {protected Logger logger = LoggerFactory.getLogger(getClass());@Pointcut("@annotation(com.test.test.config.DataSource) || @within(com.test.test.config.DataSource)")public void dataSourcePointCut() {}@Around("dataSourcePointCut()")public Object around(ProceedingJoinPoint point) throws Throwable {Class<?> aClass = point.getTarget().getClass();DataSource ds = aClass.getAnnotation(DataSource.class);if(ds==null){MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();ds = method.getAnnotation(DataSource.class);}DynamicDataSource.setDataSource(DataSourceType.CLICK);System.out.println("當(dāng)前數(shù)據(jù)源: " + ds.value());logger.debug("set datasource is " + ds.value());try {return point.proceed();} finally {DynamicDataSource.clearDataSource();logger.debug("clean datasource");}}@Overridepublic int getOrder() {return 1;}} public enum DataSourceType {/*** 從庫(kù)*/CLICK,MYSQL;} public class DynamicDataSource extends AbstractRoutingDataSource {private static final ThreadLocal<DataSourceType> contextHolder = new ThreadLocal<>();public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {super.setDefaultTargetDataSource(defaultTargetDataSource);super.setTargetDataSources(targetDataSources);super.afterPropertiesSet();}@Overrideprotected Object determineCurrentLookupKey() {return getDataSource();}public static void setDataSource(DataSourceType dataSource) {contextHolder.set(dataSource);}public static DataSourceType getDataSource() {return contextHolder.get();}public static void clearDataSource() {contextHolder.remove();}} @Configuration public class DynamicDataSourceConfig {@Bean@ConfigurationProperties("spring.datasource.druid.mysql")public DataSource mysqlDataSource() {DataSource datasource = DruidDataSourceBuilder.create().build();return datasource;}@Bean@ConfigurationProperties("spring.datasource.druid.click")public DataSource clickDataSource(){DataSource datasource = DruidDataSourceBuilder.create().build();return datasource;}@Bean@Primarypublic DynamicDataSource dataSource(DataSource mysqlDataSource, DataSource clickDataSource) {Map<Object, Object> targetDataSources = new HashMap<>(2);targetDataSources.put(DataSourceType.MYSQL, mysqlDataSource);targetDataSources.put(DataSourceType.CLICK, clickDataSource);// 還有數(shù)據(jù)源,在targetDataSources中繼續(xù)添加System.out.println("DataSources:" + targetDataSources);return new DynamicDataSource(mysqlDataSource, targetDataSources);}}4.使用動(dòng)態(tài)數(shù)據(jù)源表
類上或方法添加 此注解即可。添加在類上既是類范圍,方法上即是只在此方法生效
@DataSource(DataSourceType.CLICK)總結(jié)
以上是生活随笔為你收集整理的springcloud多数据源配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 我们的最后:在CSS中使用last-ch
- 下一篇: 爬虫进阶学习之路---js逆向登录