Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Java verbindet sich mit mehreren Datenbanken

Sie speichern eine eindeutige Datenquelle (und Verbindung und dbMainConnection) in einem Static Variable Ihrer Klasse. Jedes Mal, wenn jemand nach einer Datenquelle fragt, ersetzen Sie die vorherige durch die neue. Wenn beim Abrufen einer Datenquelle von JNDI eine Ausnahme auftritt, bleibt die statische Datenquelle unverändert. Sie sollten nichts in einer statischen Variablen speichern. Da Ihre dbMainConnection-Klasse mit dem Namen einer Datenbank aufgebaut ist und es mehrere Datenbanknamen gibt, macht es keinen Sinn, sie zu einem Singleton zu machen.

Verwenden Sie einfach den folgenden Code, um auf die Datenquelle zuzugreifen:

public final class DataSourceUtil {
    /**
     * Private constructor to prevent unnecessary instantiations
     */
    private DataSourceUtil() {
    }

    public static DataSource getDataSource(String name) {
        try {
            Context ctx = new InitialContext();
            String database = "jdbc/" + name;
            return (javax.sql.DataSource) ctx.lookup (database);
        }
        catch (NamingException e) {
            throw new IllegalStateException("Error accessing JNDI and getting the database named " + name);
        }
    }
}

Und lassen Sie die Anrufer eine Verbindung von der Datenquelle herstellen und schließen Sie sie, wenn sie mit der Verwendung fertig sind.