繁体   English   中英

Quarkus 中的动态数据源连接

[英]Dynamic datasource connection in Quarkus

我的问题类似于这篇 2 年前的帖子中的问题:

有没有办法用 quarkus 处理与数据源的动态连接?

我说了 10 个不同的数据库,它们都在 Postgres 中,它们甚至有相同的用户和密码,所以唯一改变的是数据库名称。

我有一个类似于 /{databasename}/customers 的端点,因此我希望能够从作为参数传递的数据库名称中检索客户列表。

我知道我可能会尝试编写一个扩展来做到这一点,但我无法做到,而且我不确定我是否真的想修改框架来做到这一点。

我想了解做这样的事情有哪些选择

我认为类似于下面代码片段的东西可能有助于动态连接到 DS,但我无法让它工作,因为这是一种在应用程序启动后以编程方式设置连接的方法:

        AgroalDataSourceConfigurationSupplier configuration = new AgroalDataSourceConfigurationSupplier()
                .dataSourceImplementation( AgroalDataSourceConfiguration.DataSourceImplementation.AGROAL )
                .metricsEnabled( false )
                .connectionPoolConfiguration( cp -> cp
                        .minSize( 5 )
                        .maxSize( 20 )
                        .initialSize( 10 )
                        .connectionValidator( AgroalConnectionPoolConfiguration.ConnectionValidator.defaultValidator() )
                        .acquisitionTimeout( Duration.ofSeconds( 5 ) )
                        .leakTimeout( Duration.ofSeconds( 5 ) )
                        .validationTimeout( Duration.ofSeconds( 50 ) )
                        .reapTimeout( Duration.ofSeconds( 500 ) )
                        .connectionFactoryConfiguration( cf -> cf
                                .jdbcUrl( "jdbc:postgresql://localhost/quarkus_test3" )
//                                .connectionProviderClassName( "org.h2.Driver" )
                                .autoCommit( false )
                                .jdbcTransactionIsolation( AgroalConnectionFactoryConfiguration.TransactionIsolation.SERIALIZABLE )
                                .principal( new NamePrincipal( "postgres" ) )
                                .credential( new SimplePassword( "postgres123" ) )
                        )
                );

        try ( AgroalDataSource dataSource = AgroalDataSource.from( configuration ) ) {
            Connection connection = dataSource.getConnection();
            connection.close();
        } catch ( SQLException e ) {
            System.out.println( "Oops! " + e.getMessage() );
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM