spring boot多数据源

spring boot多数据源


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @ClassName: ChangeDS
 * @Description: 切换数据源的注解
 **/
//自定义注解,用于切换数据源
@Retention(RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ChangeDS {
    String value() default "";
}


package com.bonc.ygjq.bd.platform.config;

import com.bonc.ygjq.bd.platform.utils.DateUtils;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName: YgjqConfigProperties
 * @Description: yml配置类
 **/
@ConfigurationProperties(prefix = "ygjq")
public class YgjqConfigProperties {
    private static int defaultPageSize;
    private static int defaultDays;
    private static String casUrl;
    public static final String format = "%.2f";

    private Map<String, List<Hikvision>> SSJK;

    private Map<String, HikariDataSource> dataSources;


    public Map<String, HikariDataSource> getDataSources() {
        return dataSources;
    }

    public void setDataSources(Map<String, HikariConfig> dataSources) {
        Map<String, HikariDataSource> map = new HashMap<>();
        dataSources.entrySet().stream().forEach(x -> {
            map.put(x.getKey(), new HikariDataSource(x.getValue()));
        });
        this.dataSources = map;
    }

    public int getDefaultDays() {
        return defaultDays;
    }

    public int getDefaultDays(Integer day) {
        return day == null ? defaultDays : day;
    }

    public void setDefaultDays(int defaultDays) {
        this.defaultDays = defaultDays;
        DateUtils.defaultDays = defaultDays;
    }

    public int getDefaultPageSize() {
        return defaultPageSize;
    }

    public static int getDefaultPageSize(Integer size) {
        return size == null ? defaultPageSize : size;
    }

    public void setDefaultPageSize(int defaultPageSize) {
        this.defaultPageSize = defaultPageSize;
    }

    public Map<String, List<Hikvision>> getSSJK() {
        return SSJK;
    }

    public void setSSJK(Map<String, List<Hikvision>> SSJK) {
        this.SSJK = SSJK;
    }

    public static String getCasUrl() {
        return casUrl;
    }

    public void setCasUrl(String casUrl) {
        YgjqConfigProperties.casUrl = casUrl;
    }
}

package com.bonc.ygjq.bd.platform.config;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.transaction.TransactionManager;

import javax.sql.DataSource;
import java.util.Map;

/**
 * @ClassName: YgjqConfiuration
 * @Description: spring配置类
 * @Version: V1.0
 **/
@Configuration
@EnableConfigurationProperties(YgjqConfigProperties.class)
public class YgjqConfiuration {
    @Autowired
    YgjqConfigProperties ygjqConfigProperties;

    @Bean//mybatis缓存
    public TimedCache<String,Object> timedCache(){
         return CacheUtil.newTimedCache(1000 * 60 * 60 * 12);
    }

    @Bean
    @Primary
    public DataSource dataSource() throws Exception {
        return new AbstractRoutingDataSource() {
            {
                Map dataSources = ygjqConfigProperties.getDataSources();
                setTargetDataSources(dataSources);
                setDefaultTargetDataSource(dataSources.get("xingyun"));//默认的
            }
            @Override
            protected Object determineCurrentLookupKey() {
                return RoutingDataSourceContext.threadLocal.get();
            }
        };
    }

    @Order(2)
    @Bean
    public DataSourceTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}



@Service
@ChangeDS("mysql")//从行云切换到mysql
public class SpClickSaveService {
    @Resource
    SpClickSaveDao spClickSaveDao;


    public void Save(String name) {
        spClickSaveDao.Save(name);
    }


    public SpClickSave fetch() {
        return spClickSaveDao.fetch();
    }
}


yggl:
 dataSources:
	 xingyun:
	    driver-class-name: com.bonc.ygjq.bd.platform.config.XCloudDriverNewDefine
	    jdbcUrl: jdbc:xcloud:@131.107.26.235:1803/yggl_cirrodata@131.107.26.238:1803/yggl_cirrodata@131.107.26.241:1803/yggl_cirrodata?connectRetry=3&socketTimeOut=3600000&connectDirect=false
	    username: PUBLISH
	    password: Yg#Gx202001
	    max-lifetime: 600000
	  mysql:
	    jdbcUrl: jdbc:mysql://appsmysql.ygjt.net:3306/web_crawler?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
	    username: crawler
	    password: Yg_GxWCrawler202001
	    driver-class-name: com.mysql.cj.jdbc.Driver
	  cas:
	    jdbcUrl: jdbc:mysql://appsmysql.ygjt.net:3306/bonc_decisionplf?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
	    username: decisionplf
	    password: Yg+GxDp202001
	    driver-class-name: com.mysql.cj.jdbc.Driver

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值