如何从 JDBC DataSource 连接到不同的数据库进程

How to connect to different DB process from JDBC DataSource

我正在使用 Apache Camel 编写 Java 应用程序并使用 JDBC DataSource(Apache commons DBCP)。

我可以创建很多连接,但所有连接都在一个 Oracle 客户端进程中处理,我可能会在会话中看到 table select * from v$session

问题是如何将一个 Java 应用程序连接到不同的 Oracle 进程以提高性能?如果您知道使用其他 Java 技术(我的示例中未使用)的方法,那也很有趣。

    public static void main(String... args) throws Exception {
    Main main = new Main();
    String url = "some url";
    String user = "user";
    String password = "password";
    DataSource dataSource = setupDataSource(url, user, password);

    // bind dataSource into the registery
    main.bind("oraDataSource", dataSource);
    main.enableHangupSupport();
    main.addRouteBuilder(new MyRouteBuilder());
    main.run(args);

}

private static DataSource setupDataSource(String connectURI, String user, String password) {
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
    ds.setMaxActive(20);
    LOG.info("max active conn: " + ds.getMaxActive());
    ds.setUsername(user);
    ds.setPassword(password);
    ds.setUrl(connectURI);
    return ds;
}

public class MyRouteBuilder extends RouteBuilder {

Processor logProcessor = new LogProcessor();
Processor createAnswer = new CreateAnswerProc();
Processor dbPaymentProcessor = new DbPaymentQueryProcessor();

/**
 * Let's configure the Camel routing rules using Java code...
 */
public void configure() {

    from("rabbitmq://localhost:5672/ps.vin_test_send?exchangeType=topic&autoDelete=false&queue=ps.test_send_queue&concurrentConsumers=20&threadPoolSize=20")
            .unmarshal().json(JsonLibrary.Jackson, Payment[].class)
            .process(dbPaymentProcessor)
            .to("jdbc:oraDataSource")
            .process(logProcessor)
            .process(createAnswer)
            .to("rabbitmq://localhost:5672/ps.vin_test?username=test&password=test&exchangeType=topic&autoDelete=false&routingKey=ps.vin_test_key&queue=vin_test_queue&concurrentConsumers=20");

}

所以,oracle 的方法是将数据库属性从专用更改为共享。它将在用户之间共享流程。但不推荐,也没有任何性能。

创建多个数据源只会降低性能。