如何从JDBC DataSource连接到不同的DB进程

时间:2015-03-20 12:45:06

标签: java oracle jdbc database-connection apache-camel

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

我可以创建许多连接但是所有连接都在一个Oracle客户端进程中处理,我可以在会话表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");

}

1 个答案:

答案 0 :(得分:0)

因此,oracle的方法是将db propeties从专用更改为共享。它将在用户之间共享进程。但是没有建议,也没有任何表现。

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