增加自定义r2dbc配置
This commit is contained in:
parent
1b29bd5e9f
commit
a029da90e4
|
|
@ -0,0 +1,40 @@
|
|||
<?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">
|
||||
<parent>
|
||||
<artifactId>jetlinks-community</artifactId>
|
||||
<groupId>org.jetlinks.community</groupId>
|
||||
<version>1.11.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>configure-component</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-r2dbc</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.r2dbc</groupId>
|
||||
<artifactId>r2dbc-pool</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package org.jetlinks.community.configure.r2dbc;
|
||||
|
||||
import io.r2dbc.pool.ConnectionPool;
|
||||
import io.r2dbc.pool.ConnectionPoolConfiguration;
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.r2dbc.*;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.PropertyMapper;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(ConnectionPool.class)
|
||||
@ConditionalOnMissingBean(ConnectionFactory.class)
|
||||
@EnableConfigurationProperties({
|
||||
R2dbcPoolProperties.class,
|
||||
R2dbcProperties.class
|
||||
})
|
||||
@AutoConfigureBefore(R2dbcAutoConfiguration.class)
|
||||
public class R2dbcPoolConfiguration {
|
||||
|
||||
@Bean(destroyMethod = "dispose")
|
||||
@Primary
|
||||
ConnectionPool connectionFactory(R2dbcProperties properties,
|
||||
R2dbcPoolProperties poolProperties,
|
||||
ResourceLoader resourceLoader,
|
||||
ObjectProvider<ConnectionFactoryOptionsBuilderCustomizer> customizers) {
|
||||
ConnectionFactory connectionFactory = ConnectionFactoryBuilder
|
||||
.of(properties, () -> EmbeddedDatabaseConnection.get(resourceLoader.getClassLoader()))
|
||||
.configure((options) -> {
|
||||
for (ConnectionFactoryOptionsBuilderCustomizer optionsCustomizer : customizers) {
|
||||
optionsCustomizer.customize(options);
|
||||
}
|
||||
})
|
||||
.build();
|
||||
R2dbcProperties.Pool pool = properties.getPool();
|
||||
|
||||
ConnectionPoolConfiguration.Builder builder = ConnectionPoolConfiguration.builder(connectionFactory);
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
map.from(pool.getMaxIdleTime()).to(builder::maxIdleTime);
|
||||
map.from(poolProperties.getMaxLifeTime()).to(builder::maxLifeTime);
|
||||
map.from(poolProperties.getMaxAcquireTime()).to(builder::maxAcquireTime);
|
||||
map.from(poolProperties.getMaxCreateConnectionTime()).to(builder::maxCreateConnectionTime);
|
||||
map.from(pool.getInitialSize()).to(builder::initialSize);
|
||||
map.from(pool.getMaxSize()).to(builder::maxSize);
|
||||
map.from(pool.getValidationQuery()).whenHasText().to(builder::validationQuery);
|
||||
map.from(poolProperties.getValidationDepth()).to(builder::validationDepth);
|
||||
map.from(poolProperties.getAcquireRetry()).to(builder::acquireRetry);
|
||||
|
||||
if (StringUtils.hasText(pool.getValidationQuery())) {
|
||||
builder.validationQuery(pool.getValidationQuery());
|
||||
}
|
||||
|
||||
return new ConnectionPool(builder.build());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package org.jetlinks.community.configure.r2dbc;
|
||||
|
||||
import io.r2dbc.spi.ValidationDepth;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ConfigurationProperties(prefix = "spring.r2dbc.pool")
|
||||
public class R2dbcPoolProperties {
|
||||
|
||||
/**
|
||||
* Maximum lifetime of a connection in the pool. By default, connections have an
|
||||
* infinite lifetime.
|
||||
*/
|
||||
private Duration maxLifeTime = Duration.ofMinutes(10);
|
||||
|
||||
/**
|
||||
* Maximum time to acquire a connection from the pool. By default, wait
|
||||
* indefinitely.
|
||||
*/
|
||||
private Duration maxAcquireTime;
|
||||
|
||||
private int acquireRetry = 3;
|
||||
/**
|
||||
* Maximum time to wait to create a new connection. By default, wait indefinitely.
|
||||
*/
|
||||
private Duration maxCreateConnectionTime;
|
||||
|
||||
/**
|
||||
* Validation query.
|
||||
*/
|
||||
private String validationQuery;
|
||||
|
||||
/**
|
||||
* Validation depth.
|
||||
*/
|
||||
private ValidationDepth validationDepth = ValidationDepth.LOCAL;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
org.jetlinks.community.configure.r2dbc.R2dbcPoolConfiguration
|
||||
|
|
@ -22,6 +22,7 @@
|
|||
<module>notify-component</module>
|
||||
<module>logging-component</module>
|
||||
<module>rule-engine-component</module>
|
||||
<module>configure-component</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>jetlinks-components</artifactId>
|
||||
|
|
|
|||
|
|
@ -246,6 +246,11 @@
|
|||
<version>2.0.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jetlinks.community</groupId>
|
||||
<artifactId>configure-component</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ spring:
|
|||
pool:
|
||||
max-size: 32
|
||||
max-idle-time: 2m # 值不能大于mysql server的wait_timeout配置
|
||||
max-life-time: 10m
|
||||
acquire-retry: 3
|
||||
reactor:
|
||||
debug-agent:
|
||||
enabled: false
|
||||
|
|
@ -38,10 +40,10 @@ spring:
|
|||
elasticsearch:
|
||||
client:
|
||||
reactive:
|
||||
endpoints: ${elasticsearch.client.host}:${elasticsearch.client.port}
|
||||
endpoints: localhost:9200
|
||||
max-in-memory-size: 100MB
|
||||
socket-timeout: ${elasticsearch.client.socket-timeout}
|
||||
connection-timeout: ${elasticsearch.client.socket-timeout}
|
||||
socket-timeout: 5000
|
||||
connection-timeout: 8000
|
||||
easyorm:
|
||||
default-schema: public # 数据库默认的schema
|
||||
dialect: postgres #数据库方言
|
||||
|
|
@ -51,13 +53,6 @@ elasticsearch:
|
|||
data-path: ./data/elasticsearch
|
||||
port: 9200
|
||||
host: 0.0.0.0
|
||||
client:
|
||||
host: localhost
|
||||
port: 9200
|
||||
max-conn-total: 128
|
||||
connect-timeout: 5000
|
||||
socket-timeout: 5000
|
||||
connection-request-timeout: 8000
|
||||
index:
|
||||
default-strategy: time-by-month #默认es的索引按月进行分表, direct则为直接操作索引.
|
||||
settings:
|
||||
|
|
|
|||
Loading…
Reference in New Issue