Notes d'étude @ 玩转 Spring 全的 斗
Le contenu du cours provient du temps où les geek jouaient à Spring Family Bucket, le lien est le suivant
https://time.geekbang.org/course/intro/100023501
Troisième jour
Partie 1HikariCP
Light (ひ か り) vient du japonais, comme son nom l'indique, cela signifie que le pool de connexion est très rapide
https://github.com/brettwooldridge/HikariCP
Le concept est grossièrement dérivé de: diverses optimisations (optimisations en bytecode et nombreuses petites améliorations) à divers endroits, le
pool de connexion à la source de données HikariCP est utilisé par défaut dans la version SpringBoot 2.X.
Les configurations courantes sont les suivantes
spring.datasource.hikari.maximumPoolSize =10
spring.datasource.hikari.minimumldle=10
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.maxLifetime=1800000
Partie2AlibabaDruid
Pool de connexion open source Alibaba, la plus grande caractéristique est que la fonction de surveillance n'affecte pas les performances
https://github.com/alibaba/druid
Via druid-spring-boot-starter
Démarrez le programme dans la démo, le programme réécrit les méthodes connection_connectBefore et connection_connectAfter, hérite de la classe FilterEventAdapter et génère le journal lorsque la méthode est exécutée
. Le pool de connexions du programme est configuré dans application.properties, le
code du journal sera donc sortie après chaque connexion avant la connexion. comme suit:
package geektime.spring.data.druiddemo;
import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterEventAdapter;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import lombok.extern.slf4j.Slf4j;
import java.util.Properties;
@Slf4j
public class ConnectionLogFilter extends FilterEventAdapter {
@Override
public void connection_connectBefore(FilterChain chain, Properties info) {
log.info("BEFORE CONNECTION!");
}
@Override
public void connection_connectAfter(ConnectionProxy connection) {
log.info("AFTER CONNECTION!");
}
}
package geektime.spring.data.druiddemo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@SpringBootApplication
@Slf4j
public class DruidDemoApplication implements CommandLineRunner {
@Autowired
private DataSource dataSource;
@Autowired
private JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
SpringApplication.run(DruidDemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info(dataSource.toString());
}
}
Portez une attention particulière à l'utilisation d'AlibabaDruid. HikariCP dont dépend spring-boot-starter-jdbc doit être exclu de
pom.xml dans pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>geektime.spring.data</groupId>
<artifactId>druid-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>druid-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<artifactId>HikariCP</artifactId>
<groupId>com.zaxxer</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
spring.output.ansi.enabled=ALWAYS
spring.datasource.url=jdbc:h2:mem:foo
spring.datasource.username=sa
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.filters=conn,config,stat,slf4j
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-on-return=true
spring.datasource.druid.test-while-idle=true
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALS8ng1XvgHrdOgm4pxrnUdt3sXtu/E8My9KzX8sXlz+mXRZQCop7NVQLne25pXHtZoDYuMh3bzoGj6v5HvvAQ8CAwEAAQ==