日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

springcloud多数据源配置

發(fā)布時(shí)間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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: 123456

2.修改主運(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)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。