当前位置: 首页 > news >正文

springBoot 配置druid多数据源 MySQL+SQLSERVER

1:pom 文件引入数据

             <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid-spring-boot-starter</artifactId>
               <version>1.1.0</version>
            </dependency>

<!-- 引入msql数据库链接包 -->

              <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>

<!-- 引入sqlserver数据库链接包 -->
<dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version>
</dependency>
2:yml文件配置
datasource:druid:slave:# 从数据源开关/默认关闭enabled: truetype: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriverurl: jdbc:sqlserver://192.168.0.1:1433;database=test;SelectMethod=cursor;username: testpassword: 12345master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.0.1:3306/test?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8username: testpassword: 123456initial-size: 10min-idle: 10max-active: 200max-wait: 60000time-between-eviction-runs-millis: 300000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒max-evictable-idle-time-millis: 900000validation-query: SELECT 'x'test-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20filters: stat
3:druid 配置属性
@Configuration
public class DruidProperties {@Value("${spring.datasource.druid.initial-size}")private int initialSize;@Value("${spring.datasource.druid.min-idle}")private int minIdle;@Value("${spring.datasource.druid.max-active}")private int maxActive;@Value("${spring.datasource.druid.max-wait}")private int maxWait;@Value("${spring.datasource.druid.time-between-eviction-runs-millis}")private int timeBetweenEvictionRunsMillis;@Value("${spring.datasource.druid.min-evictable-idle-time-millis}")private int minEvictableIdleTimeMillis;@Value("${spring.datasource.druid.max-evictable-idle-time-millis}")private int maxEvictableIdleTimeMillis;@Value("${spring.datasource.druid.validation-query}")private String validationQuery;@Value("${spring.datasource.druid.test-while-idle}")private boolean testWhileIdle;@Value("${spring.datasource.druid.test-on-borrow}")private boolean testOnBorrow;@Value("${spring.datasource.druid.test-on-return}")private boolean testOnReturn;public DruidDataSource dataSource(DruidDataSource datasource) {/** 配置初始化大小、最小、最大 */datasource.setInitialSize(initialSize);datasource.setMaxActive(maxActive);datasource.setMinIdle(minIdle);/** 配置获取连接等待超时的时间 */datasource.setMaxWait(maxWait);/** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);/** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);/*** 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。*/datasource.setValidationQuery(validationQuery);/** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */datasource.setTestWhileIdle(testWhileIdle);/** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */datasource.setTestOnBorrow(testOnBorrow);/** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */datasource.setTestOnReturn(testOnReturn);return datasource;}
}

4:druid 配置多数据源
@Configuration
public class DruidConfig {@Bean@ConfigurationProperties("spring.datasource.druid.master")public DataSource masterDataSource(DruidProperties druidProperties) {DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}@Bean@ConfigurationProperties("spring.datasource.druid.slave")@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")public DataSource slaveDataSource(DruidProperties druidProperties) {DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}@Bean(name = "dynamicDataSource")@Primarypublic DynamicDataSource dataSource(DataSource masterDataSource) {Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");return new DynamicDataSource(masterDataSource, targetDataSources);}/*** 设置数据源** @param targetDataSources 备选数据源集合* @param sourceName        数据源名称* @param beanName          bean名称*/public void setDataSource(Map<Object, Object> targetDataSources, String sourceName, String beanName) {try {DataSource dataSource = (DataSource) ApplicationUtil.getBean(beanName);targetDataSources.put(sourceName, dataSource);} catch (Exception e) {}}/*** 去除监控页面底部的广告*/@SuppressWarnings({"rawtypes", "unchecked"})@Bean@ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {// 获取web监控页面的参数DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();// 提取common.js的配置路径String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");final String filePath = "support/http/resources/js/common.js";// 创建filter进行过滤Filter filter = new Filter() {@Overridepublic void init(javax.servlet.FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {chain.doFilter(request, response);// 重置缓冲区,响应头不会被重置response.resetBuffer();// 获取common.jsString text = Utils.readFromResource(filePath);// 正则替换banner, 除去底部的广告信息text = text.replaceAll("<a.*?banner\"></a><br/>", "");text = text.replaceAll("powered.*?shrek.wang</a>", "");response.getWriter().write(text);}@Overridepublic void destroy() {}};FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(filter);registrationBean.addUrlPatterns(commonJsPattern);return registrationBean;}
}
5:自定义多数据源切换注解
优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface DataSource
{/*** 切换数据源名称*/public DataSourceType value() default DataSourceType.MASTER;
}
6:数据源枚举类
public enum DataSourceType {/*** 主库*/MASTER,/*** 从库*/SLAVE}
7:使用 在mapper方法上或者server 方法上加注解指定数据源

      

http://www.lryc.cn/news/235771.html

相关文章:

  • 二叉树的创建与遍历
  • Mysql相关操作命令合集
  • 前端开发学习 (一) 搭建Vue基础环境
  • 二维码智慧门牌管理系统升级解决方案:查询功能大提升,让地址查找变得轻松便捷!
  • vite+vue3+electron开发环境搭建
  • C#入门(9):多态介绍与代码演示
  • 可拖动、可靠边的 popupWindow 实现
  • C# 依赖注入如何实现
  • Redis 9 数据库
  • 43-设计问题-最小栈
  • 基于RK3588全高端智能终端机器人主板
  • 穿越风波,“长红”的直播电商依然扎根产业和消费者
  • LLM大模型 (chatgpt) 在搜索和推荐上的应用
  • 中国净初级生产力年度合成产品NPP(MYD17A3H.006)
  • GitHub如何删除仓库
  • 漫谈广告机制设计 | 万剑归宗:聊聊广告机制设计与收入提升的秘密(3)
  • 安装系统时无raid驱动处理办法
  • ForkLift:macOS文件管理器/FTP客户端
  • 信息系统项目管理师 第四版 第20章 高级项目管理
  • Apache Pulsar 技术系列 - 基于 Pulsar 的海量 DB 数据采集和分拣
  • HDFS、MapReduce原理--学习笔记
  • PC端使子组件的弹框关闭
  • PHPStorm PHP-CS-Fixer
  • SpringBoot中日志的使用log4j
  • 迭代器与生成器
  • 适用于 Windows 的 10 个最佳视频转换器:快速转换高清视频
  • 分布式锁的概念、应用场景、实现方式和优缺点对比
  • Linux:常见指令
  • 大数据基础设施搭建 - ZooKeeper
  • 网站优化工具Google Optimize