Unfortunately, load balancing of Aurora cluster is quite limited. First of all, it balances connection at the moment of connection being established and does not re-balance them under any circumstances, unless the connection is dropped and re-opened (but that has limitations too, see below).
Second, when Aurora does distribute the connections, it, however, does not take into account the number of connections already established to each read-replica.
Third, it does it using DNS switch process with TTL of 1 second. As result of all of the above, it is, unfortunately, very common case, when some replicas receive MUCH more connections, than others. Not to mention absence of mechanism of drying out instances for switching off etc.
Because all of the above limitations and highly unbalanced load, we've developed a fairlink
JDBC driver (or rather envelop-driver) for MySQL and PostgreSQL. You can find it here: https://github.com/DiceTechnology/dice-fairlink