BalanceStrategy
Date: 2018-05-01

com.mysql.jdbc

## Interface BalanceStrategy

- All Superinterfaces:
    Extension
  All Known Implementing Classes:
    BestResponseTimeBalanceStrategy, RandomBalanceStrategy, SequentialBalanceStrategy

      public interface BalanceStrategy
      extends Extension

  Implement this interface to provide a new load balancing strategy for URLs of the form "jdbc:mysql:loadbalance://..", and provide the implementation class name as the configuration parameter "loadBalanceStrategy". The driver will not pass in a Connection instance when calling init(), but it will pass in the Properties, otherwise it acts like a normal Extension. One instance of a strategy *per* JDBC connection instance will be created. If you need singleton-like behavior, you're on your own to provide it.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ConnectionImpl` | `pickConnection(LoadBalancedConnectionProxy proxy, java.util.List<java.lang.String> configuredHosts, java.util.Map<java.lang.String,ConnectionImpl> liveConnections, long[] responseTimes, int numRetries)` Called by the driver to pick a new connection to route requests over.

    - ### Methods inherited from interface com.mysql.jdbc.Extension

      `destroy, init`

- - ### Method Detail

    - #### pickConnection

          ConnectionImpl pickConnection(LoadBalancedConnectionProxy proxy,
                                      java.util.List<java.lang.String> configuredHosts,
                                      java.util.Map<java.lang.String,ConnectionImpl> liveConnections,
                                      long[] responseTimes,
                                      int numRetries)
                                        throws java.sql.SQLException

      Called by the driver to pick a new connection to route requests over.
      Parameters:
        `proxy` - the InvocationHandler that deals with actual method calls to the JDBC connection, and serves as a factory for new connections for this strategy via the createConnectionForHost() method. This proxy takes care of maintaining the response time list, map of host/ports to live connections, and taking connections out of the live connections map if they receive a network-related error while they are in use by the application.
        `configuredHosts` - the list of hosts/ports (in "host:port" form) as passed in by the user.
        `liveConnections` - a map of host/ports to "live" connections to them.
        `responseTimes` - the list of response times for a transaction for each host in the configured hosts list.
        `numRetries` - the number of times the driver expects this strategy to re-try connection attempts if creating a new connection fails.
      Returns:
        the physical JDBC connection for the application to use, based upon the strategy employed.
      Throws:
        `java.sql.SQLException` - if a new connection can not be found or created by this strategy.
      See Also:
        `LoadBalancedConnectionProxy.createConnectionForHost(String)`