SpringBoot配置Mysql连接参数

10 篇文章 0 订阅
2 篇文章 0 订阅

SpringBoot配置Mysql连接参数

1.SpringBoot默认支持如下数据源
  • 1.com.zaxxer.hikari.HikariDataSource(SpringBoot2.0以上,默认使用此数据源)
  • 2.org.apache.tomcat.jdbc.pool.DataSource
  • 3.org.apache.commons.dbcp2.BasicDataSource
spring:
# 数据源配置
	datasource:
		type: com.zaxxer.hikari.HikariDataSource
		driver-class-name: com.mysql.cj.jdbc.Driver
		username: root
		password: fasodifowe
		url: jdbc:mysql://1.1.1.1:3306/database1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8%useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&Reconnect=true&failOverReadOnly=false

pom.xml中添加

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.23</version>
</dependency>
部分常用连接参数解释

Mysql8.0以上版本的数据库连接有所不同:

  1. jar包使用mysql-connector-java-8.0.16.jar
  2. com.mysql.jdbc.Driver更改为com.mysql.cj.jdbc.Driver
    在这里插入图片描述
    在这里插入图片描述
多数据源配置与使用
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>
  • 配置多数据源
spring:
  datasource: #数据库链接相关配置
    dynamic:
      druid: #以下是全局默认值,可以全局更改
        #监控统计拦截的filters
        filters: stat
        #配置初始化大小/最小/最大
        initial-size: 1
        min-idle: 1
        max-active: 20
        #获取连接等待超时时间
        max-wait: 60000
        #间隔多久进行一次检测,检测需要关闭的空闲连接
        time-between-eviction-runs-millis: 60000
        #一个连接在池中最小生存的时间
        min-evictable-idle-time-millis: 300000
        validation-query: SELECT 'x'
        test-while-idle: true
        test-on-borrow: false
        test-on-return: false
        #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
        pool-prepared-statements: false
        max-pool-prepared-statement-per-connection-size: 20
        stat:
          merge-sql: true
          log-slow-sql: true
          slow-sql-millis: 2000
            primary: A
      datasource:
        A:
          url: jdbc:mysql://192.168.1.118:3306/dev_ops_aa?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
        B:
          url: jdbc:mysql://192.168.1.118:3306/dev_ops_bb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
        C:
          url: jdbc:mysql://192.168.1.118:3306/dev_ops_cc?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver
  • 多数据源使用
//不加@DS 表示使用默认的数据库,即 A
@Service
public class TeacherServiceImpl {
    public boolean addTeacherWithTx(String name, Integer age) {
        return teacherMapper.addTeacher(name, age);
    }
}
 
//加在**ServiceImpl实现类上:表示这个类都使用B数据源
@Service
@DS(B)
public class TeacherServiceImpl extends ** implements ** {
    public boolean addTeacherWithTx(String name, Integer age) {
        return teacherMapper.addTeacher(name, age);
    }
}
 
 
//加在实现类的方法上,表示这个方法使用C数据源
@Service
public class TeacherServiceImpl extends ** implements ** {
    
    @DS(C)
    public boolean sel**(String name, Integer age) {
        return teacherMapper.sel**(name, age);
    }
}
 
//加在某个mapper的get**的语句上,表示使用C数据源
@Mapper
public interface **Mapper extends BaseMapper<**> {
    @DS(C)
    @Select(SELECT COUNT(1)   +
            FROM sys_file_log  +
            WHERE del_flag = FALSE   +
              AND do_status = 3  +
             AND bus_date = #{dateStr})
    int get**(@Param(dateStr) String dateStr);
}
使用jdbc:mysql:replication读写分离
spring:
    # 数据源配置
    datasource:
	  #还没有测试mysql8是否支持,若不支持就退回 com.mysql.jdbc.Driver
      driver-class-name: com.mysql.cj.jdbc.Driver
	  #这个配置需要保证所有mysql的账户和密码一致
      url: jdbc:mysql:replication://192.168.1.118:3306,192.168.1.119:3306,192.168.1.120:3306/dev_ops_aa?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
      username: root
      password: 123456
	  #数据库连接池配置
      hikari:
        ##等待从连接池中获得连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
        connection-timeout: 30000
        ##一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
        idle-timeout: 600000
        ##一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒以上
        max-lifetime: 1765000
        pool-name: slave
        maximum-pool-size: 50
  • url解释:master库为第一个ip(为主从数据库中的主库),slave库为后面的多个ip(为主从数据库的从库)
  • @Transactional 默认的readOnly参数是false,更新操作不需要特别的改动。propagation是指的事务传播方式,默认设置是Require,指的是“本次操作需要事务支持,如果没有事务开启一个事务,如果有事务,加入到该事务中

@Transactional (propagation=Propagation.REQUIRED, readOnly =  true )
public  OrderBase getOrder(String orderCode) {
     findSubOrderList(orderCode);
}
 
@Transactional (propagation=Propagation.REQUIRED, readOnly =  true )
public  List<OrderSub> findSubOrderList(String orderCode) {
}
 
@Transactional (propagation=Propagation.REQUIRED, readOnly =  false )
public  void  updateOrder(OrderBase orderBase) {
     findSubOrderList(orderBase.getCode());
  • 1、当外部调用getOrder时,getOrder方法的@Transaction(readOnly = true 只读 )注解生效,设置从库查询。

  • 2、当外部调用updateOrder时,updateOrder方法的@Transaction(readOnly = false 不是只读)注解生效,设置操作主库。

注意:这两个方法都调用了findSubOrderList方法,而调用的对象是this,不是被spring事务管理器替换过的service对象,所以findSubOrderList方法上的@Transaction注解无效,会根据上文环境来查主库和从库

这种特性对于业务来说是恰当好处的,生效的事务是在最外层的方法上,可以避免在一个事务内部出现读写库不统一的情况

使用jdbc:mysql:loadbalance负载均衡
spring:
    # 数据源配置
    datasource:
	  #还没有测试mysql8是否支持,若不支持就退回 com.mysql.jdbc.Driver
      driver-class-name: com.mysql.cj.jdbc.Driver
	  #这个配置需要保证所有mysql的账户和密码一致
      url: jdbc:mysql:loadbalance://192.168.1.119:3306,192.168.1.119:3306,192.168.1.120:3306/dev_ops_aa?roundRobinLoadBalance=true&failOverReadOnly=false&tcpRcvBuf=1024000&loadBalanceStrategy=bestResponseTime&loadBalanceBlacklistTimeout=300000&loadBalancePingTimeout=1000&selfDestructOnPingMaxOperations=200&queryTimeoutKillsConnection=true&loadBalanceValidateConnectionOnSwapServer=true&connectTimeout=1000&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowMultiQueries=true&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
      username: root
      password: 123456
	  #数据库连接池配置
      hikari:
        ##等待从连接池中获得连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
        connection-timeout: 30000
        ##一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
        idle-timeout: 600000
        ##一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒以上
        max-lifetime: 1765000
        pool-name: slave
        maximum-pool-size: 50

url参数解释
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值