直播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源码,数据库多数据源自动选择实现,更多内容欢迎关注之后的文章
浙公网安备 33010602011771号