直播app源码,数据库多数据源自动选择实现

直播app源码,数据库多数据源自动选择实现

1、写对应枚举的数据源

 

public enum DataSourceEnum {
    DB1("空铁", "datasource1"),
    DB2("同程", "datasource2"),
    DB3("账号", "datasource3");
    private String name;
    private String value;
    DataSourceEnum(String name, String value) {
        this.name = name;
        this.value = value;
    }
    public String getName(){
        return this.name;
    }
    public String getValue() {
        return this.value;
    }
}

2、实现注解功能

可以使用注解的方式,注解sql使用哪个数据源,在执行sql的时候,就会自动选择对应的数据源

 


import java.lang.annotation.*;
 
@Target({ElementType.METHOD,ElementType.TYPE})    //固定写法
@Retention(RetentionPolicy.RUNTIME)    //固定写法
@Documented    //固定写法
public @interface DataSource       //可自定义注解名字
{
    DataSourceEnum value() default DataSourceEnum.DB1;   //默认的数据源,此处的数据源是自己写的配置
}

 

3、切面,实现注解形式自动切换数据源

 

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
 
@Aspect
@Component
@Slf4j
@Order(-1)
public class DataSourceAspect {
    //↓↓↓此处的DataSource路径是注解的路径,通过注解实现切面功能
    @Pointcut("@within(com.ccservice.searchordernum.config.DataSource)||@annotation(com.ccservice.searchordernum.config.DataSource)")
    public void pointCut(){}
    //↓↓↓annotation中的datasource是下面方法中的参数。参数中的datasource是注解类
    @Before("pointCut() && @annotation(dataSource)")
    public void doBefor(DataSource dataSource){
        log.info("选择数据源:{}", dataSource.value().getName());  //此处加一个日志,打印出来切换的数据源
        //此处设置切换数据源。动态切换。后续我们设置数据源的时候以枚举的value作为key,所以此处设置value就达到了切换数据源的效果
        DataSourceContextHolder.setDatasource(dataSource.value().getValue());  
    }
    @After("pointCut()")
    public void doAfter() {
        DataSourceContextHolder.clear();  //之后进行数据源清空
    }
}

 

4、配置druid监控页面

 

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class DataSourceConfiguration {
    @Bean
    public ServletRegistrationBean startViewServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // IP白名单  此处最好把黑白名单去掉,暂时不清楚怎么弄的
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        // IP黑名单(共同存在时,deny优先于allow)
        servletRegistrationBean.addInitParameter("deny","127.0.0.1");
        //控制台管理用户   配置账号密码等
        servletRegistrationBean.addInitParameter("loginUsername","admin");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能够重置数据
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }
    @Bean
    public FilterRegistrationBean statFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略过滤的格式
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

 

 以上就是 直播app源码,数据库多数据源自动选择实现,更多内容欢迎关注之后的文章

 

posted @ 2023-01-10 14:08  云豹科技-苏凌霄  阅读(69)  评论(0)    收藏  举报