Java tutorial
/* * Copyright (C) 2017 Julien Viet * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package io.vertx.pgclient; import io.vertx.codegen.annotations.GenIgnore; import io.vertx.pgclient.impl.PgConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.buffer.Buffer; import io.vertx.core.json.JsonObject; import io.vertx.core.net.*; import io.vertx.sqlclient.SqlConnectOptions; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import static java.lang.Integer.parseInt; import static java.lang.System.getenv; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> * @author Billy Yuan <billy112487983@gmail.com> */ @DataObject(generateConverter = true) public class PgConnectOptions extends SqlConnectOptions { /** * Provide a {@link PgConnectOptions} configured from a connection URI. * * @param connectionUri the connection URI to configure from * @return a {@link PgConnectOptions} parsed from the connection URI * @throws IllegalArgumentException when the {@code connectionUri} is in an invalid format */ public static PgConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { JsonObject parsedConfiguration = PgConnectionUriParser.parse(connectionUri); return new PgConnectOptions(parsedConfiguration); } /** * Provide a {@link PgConnectOptions} configured with environment variables, if the environment variable * is not set, then a default value will take precedence over this. */ public static PgConnectOptions fromEnv() { PgConnectOptions pgConnectOptions = new PgConnectOptions(); if (getenv("PGHOSTADDR") == null) { if (getenv("PGHOST") != null) { pgConnectOptions.setHost(getenv("PGHOST")); } } else { pgConnectOptions.setHost(getenv("PGHOSTADDR")); } if (getenv("PGPORT") != null) { try { pgConnectOptions.setPort(parseInt(getenv("PGPORT"))); } catch (NumberFormatException e) { // port will be set to default } } if (getenv("PGDATABASE") != null) { pgConnectOptions.setDatabase(getenv("PGDATABASE")); } if (getenv("PGUSER") != null) { pgConnectOptions.setUser(getenv("PGUSER")); } if (getenv("PGPASSWORD") != null) { pgConnectOptions.setPassword(getenv("PGPASSWORD")); } if (getenv("PGSSLMODE") != null) { pgConnectOptions.setSslMode(SslMode.of(getenv("PGSSLMODE"))); } return pgConnectOptions; } public static final String DEFAULT_HOST = "localhost"; public static int DEFAULT_PORT = 5432; public static final String DEFAULT_DATABASE = "db"; public static final String DEFAULT_USER = "user"; public static final String DEFAULT_PASSWORD = "pass"; public static final int DEFAULT_PIPELINING_LIMIT = 256; public static final SslMode DEFAULT_SSLMODE = SslMode.DISABLE; public static final Map<String, String> DEFAULT_PROPERTIES; static { Map<String, String> defaultProperties = new HashMap<>(); defaultProperties.put("application_name", "vertx-pg-client"); defaultProperties.put("client_encoding", "utf8"); defaultProperties.put("DateStyle", "ISO"); defaultProperties.put("intervalStyle", "postgres"); defaultProperties.put("extra_float_digits", "2"); DEFAULT_PROPERTIES = Collections.unmodifiableMap(defaultProperties); } private int pipeliningLimit; private SslMode sslMode; public PgConnectOptions() { super(); } public PgConnectOptions(JsonObject json) { super(json); PgConnectOptionsConverter.fromJson(json, this); } public PgConnectOptions(PgConnectOptions other) { super(other); pipeliningLimit = other.pipeliningLimit; sslMode = other.sslMode; } @Override public PgConnectOptions setHost(String host) { return (PgConnectOptions) super.setHost(host); } @Override public PgConnectOptions setPort(int port) { return (PgConnectOptions) super.setPort(port); } @Override public PgConnectOptions setUser(String user) { return (PgConnectOptions) super.setUser(user); } @Override public PgConnectOptions setPassword(String password) { return (PgConnectOptions) super.setPassword(password); } @Override public PgConnectOptions setDatabase(String database) { return (PgConnectOptions) super.setDatabase(database); } public int getPipeliningLimit() { return pipeliningLimit; } public PgConnectOptions setPipeliningLimit(int pipeliningLimit) { if (pipeliningLimit < 1) { throw new IllegalArgumentException(); } this.pipeliningLimit = pipeliningLimit; return this; } public PgConnectOptions setCachePreparedStatements(boolean cachePreparedStatements) { return (PgConnectOptions) super.setCachePreparedStatements(cachePreparedStatements); } @Override public PgConnectOptions setPreparedStatementCacheMaxSize(int preparedStatementCacheMaxSize) { return (PgConnectOptions) super.setPreparedStatementCacheMaxSize(preparedStatementCacheMaxSize); } @Override public PgConnectOptions setPreparedStatementCacheSqlLimit(int preparedStatementCacheSqlLimit) { return (PgConnectOptions) super.setPreparedStatementCacheSqlLimit(preparedStatementCacheSqlLimit); } @Override public PgConnectOptions setProperties(Map<String, String> properties) { return (PgConnectOptions) super.setProperties(properties); } @GenIgnore @Override public PgConnectOptions addProperty(String key, String value) { return (PgConnectOptions) super.addProperty(key, value); } /** * @return the value of current sslmode */ public SslMode getSslMode() { return sslMode; } /** * Set {@link SslMode} for the client, this option can be used to provide different levels of secure protection. * * @param sslmode the value of sslmode * @return a reference to this, so the API can be used fluently */ public PgConnectOptions setSslMode(SslMode sslmode) { this.sslMode = sslmode; return this; } @Override public PgConnectOptions setSendBufferSize(int sendBufferSize) { return (PgConnectOptions) super.setSendBufferSize(sendBufferSize); } @Override public PgConnectOptions setReceiveBufferSize(int receiveBufferSize) { return (PgConnectOptions) super.setReceiveBufferSize(receiveBufferSize); } @Override public PgConnectOptions setReuseAddress(boolean reuseAddress) { return (PgConnectOptions) super.setReuseAddress(reuseAddress); } @Override public PgConnectOptions setTrafficClass(int trafficClass) { return (PgConnectOptions) super.setTrafficClass(trafficClass); } @Override public PgConnectOptions setTcpNoDelay(boolean tcpNoDelay) { return (PgConnectOptions) super.setTcpNoDelay(tcpNoDelay); } @Override public PgConnectOptions setTcpKeepAlive(boolean tcpKeepAlive) { return (PgConnectOptions) super.setTcpKeepAlive(tcpKeepAlive); } @Override public PgConnectOptions setSoLinger(int soLinger) { return (PgConnectOptions) super.setSoLinger(soLinger); } @Override public PgConnectOptions setIdleTimeout(int idleTimeout) { return (PgConnectOptions) super.setIdleTimeout(idleTimeout); } @Override public PgConnectOptions setIdleTimeoutUnit(TimeUnit idleTimeoutUnit) { return (PgConnectOptions) super.setIdleTimeoutUnit(idleTimeoutUnit); } @Override public PgConnectOptions setSsl(boolean ssl) { if (ssl) { setSslMode(SslMode.VERIFY_CA); } else { setSslMode(SslMode.DISABLE); } return this; } @Override public PgConnectOptions setKeyCertOptions(KeyCertOptions options) { return (PgConnectOptions) super.setKeyCertOptions(options); } @Override public PgConnectOptions setKeyStoreOptions(JksOptions options) { return (PgConnectOptions) super.setKeyStoreOptions(options); } @Override public PgConnectOptions setPfxKeyCertOptions(PfxOptions options) { return (PgConnectOptions) super.setPfxKeyCertOptions(options); } @Override public PgConnectOptions setPemKeyCertOptions(PemKeyCertOptions options) { return (PgConnectOptions) super.setPemKeyCertOptions(options); } @Override public PgConnectOptions setTrustOptions(TrustOptions options) { return (PgConnectOptions) super.setTrustOptions(options); } @Override public PgConnectOptions setTrustStoreOptions(JksOptions options) { return (PgConnectOptions) super.setTrustStoreOptions(options); } @Override public PgConnectOptions setPemTrustOptions(PemTrustOptions options) { return (PgConnectOptions) super.setPemTrustOptions(options); } @Override public PgConnectOptions setPfxTrustOptions(PfxOptions options) { return (PgConnectOptions) super.setPfxTrustOptions(options); } @Override public PgConnectOptions addEnabledCipherSuite(String suite) { return (PgConnectOptions) super.addEnabledCipherSuite(suite); } @Override public PgConnectOptions addEnabledSecureTransportProtocol(String protocol) { return (PgConnectOptions) super.addEnabledSecureTransportProtocol(protocol); } @Override public PgConnectOptions addCrlPath(String crlPath) throws NullPointerException { return (PgConnectOptions) super.addCrlPath(crlPath); } @Override public PgConnectOptions addCrlValue(Buffer crlValue) throws NullPointerException { return (PgConnectOptions) super.addCrlValue(crlValue); } @Override public PgConnectOptions setTrustAll(boolean trustAll) { return (PgConnectOptions) super.setTrustAll(trustAll); } @Override public PgConnectOptions setConnectTimeout(int connectTimeout) { return (PgConnectOptions) super.setConnectTimeout(connectTimeout); } @Override public PgConnectOptions setMetricsName(String metricsName) { return (PgConnectOptions) super.setMetricsName(metricsName); } @Override public PgConnectOptions setReconnectAttempts(int attempts) { return (PgConnectOptions) super.setReconnectAttempts(attempts); } @Override public PgConnectOptions setHostnameVerificationAlgorithm(String hostnameVerificationAlgorithm) { return (PgConnectOptions) super.setHostnameVerificationAlgorithm(hostnameVerificationAlgorithm); } @Override public PgConnectOptions setLogActivity(boolean logEnabled) { return (PgConnectOptions) super.setLogActivity(logEnabled); } @Override public PgConnectOptions setReconnectInterval(long interval) { return (PgConnectOptions) super.setReconnectInterval(interval); } @Override public PgConnectOptions setProxyOptions(ProxyOptions proxyOptions) { return (PgConnectOptions) super.setProxyOptions(proxyOptions); } @Override public PgConnectOptions setLocalAddress(String localAddress) { return (PgConnectOptions) super.setLocalAddress(localAddress); } @Override public PgConnectOptions setUseAlpn(boolean useAlpn) { return (PgConnectOptions) super.setUseAlpn(useAlpn); } @Override public PgConnectOptions setSslEngineOptions(SSLEngineOptions sslEngineOptions) { return (PgConnectOptions) super.setSslEngineOptions(sslEngineOptions); } @Override public PgConnectOptions setJdkSslEngineOptions(JdkSSLEngineOptions sslEngineOptions) { return (PgConnectOptions) super.setJdkSslEngineOptions(sslEngineOptions); } @Override public PgConnectOptions setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) { return (PgConnectOptions) super.setOpenSslEngineOptions(sslEngineOptions); } @Override public PgConnectOptions setReusePort(boolean reusePort) { return (PgConnectOptions) super.setReusePort(reusePort); } @Override public PgConnectOptions setTcpFastOpen(boolean tcpFastOpen) { return (PgConnectOptions) super.setTcpFastOpen(tcpFastOpen); } @Override public PgConnectOptions setTcpCork(boolean tcpCork) { return (PgConnectOptions) super.setTcpCork(tcpCork); } @Override public PgConnectOptions setTcpQuickAck(boolean tcpQuickAck) { return (PgConnectOptions) super.setTcpQuickAck(tcpQuickAck); } @Override public PgConnectOptions setEnabledSecureTransportProtocols(Set<String> enabledSecureTransportProtocols) { return (PgConnectOptions) super.setEnabledSecureTransportProtocols(enabledSecureTransportProtocols); } @Override public PgConnectOptions setSslHandshakeTimeout(long sslHandshakeTimeout) { return (PgConnectOptions) super.setSslHandshakeTimeout(sslHandshakeTimeout); } @Override public PgConnectOptions setSslHandshakeTimeoutUnit(TimeUnit sslHandshakeTimeoutUnit) { return (PgConnectOptions) super.setSslHandshakeTimeoutUnit(sslHandshakeTimeoutUnit); } /** * Initialize with the default options. */ protected void init() { this.setHost(DEFAULT_HOST); this.setPort(DEFAULT_PORT); this.setUser(DEFAULT_USER); this.setPassword(DEFAULT_PASSWORD); this.setDatabase(DEFAULT_DATABASE); pipeliningLimit = DEFAULT_PIPELINING_LIMIT; sslMode = DEFAULT_SSLMODE; this.setProperties(new HashMap<>(DEFAULT_PROPERTIES)); } @Override public JsonObject toJson() { JsonObject json = super.toJson(); PgConnectOptionsConverter.toJson(this, json); return json; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof PgConnectOptions)) return false; if (!super.equals(o)) return false; PgConnectOptions that = (PgConnectOptions) o; if (pipeliningLimit != that.pipeliningLimit) return false; if (sslMode != that.sslMode) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + pipeliningLimit; result = 31 * result + sslMode.hashCode(); return result; } public boolean isUsingDomainSocket() { return this.getHost().startsWith("/"); } }