druid和druid-spring-boot-starter区别,以及springboo。。。
⼀、druid和druid-spring-boot-starter区别分析
1. 作⽤是⼀样的,都是连接池提供连接,⾥边的配置参数都是⼀样的;
2. druid-spring-boot-starter只是在druid基础上进⾏了⼀次封装,专门⽤来整合spring-boot项⽬;
如果springboot项⽬想使⽤druid也是可以的,但是需要⼿动编写配置类并注⼊到bean中,并加载对应的配置参数;但是不建议,明明有现成封装好的jar,就直接使⽤就好了
⼆、springboot项⽬中提⽰报错Cannot resolve configuration property ''
1、问题发现:
定位接⼝⽆响应问题时,发现是由于数据库挂了导致的;但是不应该呀,数据库连接池设置了最⼤等待超时时间还是有返回的,然后深⼊解读代码,发现是配置参数有问题
2、分析
问题1:为什么datasource下边就没有这些参数,这样⼦配置居然没有报错,只是提⽰? ---> 原来spring-b
oot是可以配置不存在的key值,只要保证格式正确,在加载的时候不会解析错误的key
问题2:那应该怎么配置? ---> 查看源码分析
(1)第⼀步:先到druid配置类 ---> spring-boot-starter的⾃动配置类基本都是xxxxxAutoConfigure 或xxxxxAutoConfiguration
发现druid配置类中注⼊了⼀个DruidDataSourceWrapper实例,且⽤@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})开启@ConfigurationProperties注解配置
(2)第⼆步:到对应的bean实例DruidDataSourceWrapper,发现使⽤注解@ConfigurationProperties配置了前缀:spring.datasource.druid,把该前缀开头的主配置⽂件中配置属性设置到对于的Bean属性上
(3)第三步:Bean本⾝没有属性,都是继承抽象类⽗类的属性,基本都设置了默认值。
spring:
#数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.100.99:3306/energy_storage_test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true    username: root
password: root
driver-class-name: sql.cj.jdbc.Driver
springboot切换log4j2
druid:
initial-size: 5  # 初始化⼤⼩
min-idle: 5      # 最⼩空闲连接个数
max-active: 20    # 最⼤连接个数
max-wait: 60000  # 配置获取连接等待超时的时间
time-between-eviction-runs-millis: 60000    # 配置间隔多久才进⾏⼀次监测,监测需要关闭的空闲连接,单位时毫秒
min-evictable-idle-time-millis: 60000      # 配置⼀个连接在池中最⼩⽣存的时间
validation-query: select 'x'                # ⽤来监测连接是否有效的sql,要求是⼀个查询语句
test-while-idle: true            # 建议配置为true,不影响性能,并且保证安全性。如果空闲时间⼤于timeBetweenEvictionRunsMillis,执⾏validationQuery检测连接是否有效。
test-on-borrow: false            # 申请连接时执⾏validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-return: false            # 归还连接时执⾏validationQuery检测连接是否有效,做了这个配置会降低性能
pool-prepared-statements: true  # 打开PSCache,并且指定每个连接上PSCache的⼤⼩
max-open-prepared-statements: 20
filter:
commons-log:
connection-logger-name: stat,wall,log4j  # 配置监控统计拦截的filters,去掉后监控界⾯sql⽆法统计,'wall'⽤于防⽕墙,此处是filter修改的地⽅
3、总结
①springboot项⽬整合druid,建议使⽤druid-spring-boot-strater,但是不代表druid⼀定不可以使⽤,有兴趣的可以⾃⼰试试
②配置yaml⽂件时,⼀定要使⽤druid下边的参数,要不然不起作⽤
三、Hikari连接池(下篇博⽂中会介绍druid切换成hikari时遇到的问题)
springboot2.0默认集成了hikari连接池,号称史上性能最好,速度最快的连接池,⾃动装配原理都⼀样,⼤家可以试试,下⾯附上常⽤的⼀些参数配置
spring:
datasource:
username: dangbo
password: dangbo
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306?auth_shiro
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5          # 最⼩空闲数,默认值为10
maximum-pool-size: 15    # 最⼤连接数,默认值为10
auto-commit: true        # 控制从池返回的连接的默认⾃动提交⾏为
idle-timeout: 30000      # 控制允许连接在池中闲置的最长时间,默认值10min
pool-name: DatebookHikariCP  # 连接池的⽤户定义名称,主要出现在⽇志记录和JMX管理控制台中以识别池和池配置。默认:⾃动⽣成
max-lifetime: 1800000    # 池中连接的最⼤⽣存期,默认值30min
connection-timeout: 30000 # 控制客户端将等待来⾃池的连接的最⼤毫秒数,默认值为30s
connection-test-query: SELECT 'x'