直播app源码,数据库多数据源自动选择实现
直播app源码,数据库多数据源自动选择实现
1、写对应枚举的数据源
1 | public enum DataSourceEnum {<br> DB1( "空铁" , "datasource1" ),<br> DB2( "同程" , "datasource2" ),<br> DB3( "账号" , "datasource3" );<br> private String name;<br> private String value;<br> DataSourceEnum(String name, String value) {<br> this.name = name;<br> this.value = value;<br> }<br> public String getName(){<br> return this.name;<br> }<br> public String getValue() {<br> return this.value;<br> }<br>} |
2、实现注解功能
可以使用注解的方式,注解sql使用哪个数据源,在执行sql的时候,就会自动选择对应的数据源
1 | <br>import java.lang.annotation.*;<br> <br>@Target({ElementType.METHOD,ElementType.TYPE}) //固定写法<br>@Retention(RetentionPolicy.RUNTIME) //固定写法<br>@Documented //固定写法<br>public @interface DataSource //可自定义注解名字<br>{<br> DataSourceEnum value() default DataSourceEnum.DB1; //默认的数据源,此处的数据源是自己写的配置<br>} |
3、切面,实现注解形式自动切换数据源
1 | import lombok.extern.slf4j.Slf4j;<br>import org.aspectj.lang.annotation.After;<br>import org.aspectj.lang.annotation.Aspect;<br>import org.aspectj.lang.annotation.Before;<br>import org.aspectj.lang.annotation.Pointcut;<br>import org.springframework.core.annotation.Order;<br>import org.springframework.stereotype.Component;<br> <br>@Aspect<br>@Component<br>@Slf4j<br>@Order(-1)<br> public class DataSourceAspect {<br> //↓↓↓此处的DataSource路径是注解的路径,通过注解实现切面功能<br> @Pointcut("@within(com.ccservice.searchordernum.config.DataSource)||@annotation(com.ccservice.searchordernum.config.DataSource)")<br> public void pointCut(){}<br> //↓↓↓annotation中的datasource是下面方法中的参数。参数中的datasource是注解类<br> @Before("pointCut() && @annotation(dataSource)")<br> public void doBefor(DataSource dataSource){<br> log.info("选择数据源:{}", dataSource.value().getName()); //此处加一个日志,打印出来切换的数据源<br> //此处设置切换数据源。动态切换。后续我们设置数据源的时候以枚举的value作为key,所以此处设置value就达到了切换数据源的效果<br> DataSourceContextHolder.setDatasource(dataSource.value().getValue()); <br> }<br> @After("pointCut()")<br> public void doAfter() {<br> DataSourceContextHolder.clear(); //之后进行数据源清空<br> }<br>} |
4、配置druid监控页面
1 | import com.alibaba.druid.support.http.StatViewServlet;<br>import com.alibaba.druid.support.http.WebStatFilter;<br>import org.springframework.boot.web.servlet.FilterRegistrationBean;<br>import org.springframework.boot.web.servlet.ServletRegistrationBean;<br>import org.springframework.context.annotation.Bean;<br>import org.springframework.context.annotation.Configuration;<br> <br>@Configuration<br> public class DataSourceConfiguration {<br> @Bean<br> public ServletRegistrationBean startViewServlet(){<br> ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean( new StatViewServlet(), "/druid/*" );<br> // IP白名单 此处最好把黑白名单去掉,暂时不清楚怎么弄的<br> servletRegistrationBean.addInitParameter("allow","127.0.0.1");<br> // IP黑名单(共同存在时,deny优先于allow)<br> servletRegistrationBean.addInitParameter("deny","127.0.0.1");<br> //控制台管理用户 配置账号密码等<br> servletRegistrationBean.addInitParameter("loginUsername","admin");<br> servletRegistrationBean.addInitParameter("loginPassword","123456");<br> //是否能够重置数据<br> servletRegistrationBean.addInitParameter("resetEnable","false");<br> return servletRegistrationBean;<br> }<br> @Bean<br> public FilterRegistrationBean statFilter(){<br> FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());<br> //添加过滤规则<br> filterRegistrationBean.addUrlPatterns("/*");<br> //忽略过滤的格式<br> filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");<br> return filterRegistrationBean;<br> }<br>} |
以上就是 直播app源码,数据库多数据源自动选择实现,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-01-10 短视频平台源码,长按视频、对话框弹出操作可选按钮
2022-01-10 直播app开发,封装式标题栏
2022-01-10 直播源码网站,对话框侧滑出现删除、已读等选项