直播app原始碼,資料庫多資料來源自動選擇實現

zhibo系統開發發表於2023-01-10

直播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原始碼,資料庫多資料來源自動選擇實現,更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2931556/,如需轉載,請註明出處,否則將追究法律責任。

相關文章