Since I use HikariCP (which I can recommend) I use a DataSourceFactory to 
configure my connections, something similar to the following pseudocode.
In this case you can read any available environment variables/properties to 
provide configuration.


public static ServerRuntime createServerRuntime() {
        return ServerRuntime
                        .builder()
                        .addConfig( "cayenne-project.xml" )
                        .addModule( b -> b.bind( DataSourceFactory.class ).to( 
AppDataSourceFactory.class ) )
                        .build();
}

private static class AppDataSourceFactory implements DataSourceFactory {

        @Override
        public DataSource getDataSource( DataNodeDescriptor dataNodeDescriptor 
) throws Exception {
                final String dataNodeName = dataNodeDescriptor.getName();

                if( dataNodeName.equals( "somenode" ) ) {
                        final HikariConfig config = new HikariConfig();
                        config.setUsername( "someuser" );
                        config.setPassword( "somepass" );
                        config.setJdbcUrl( "someurl" );
                        config.setMaximumPoolSize( 4 );
                        return new HikariDataSource( config );
                }

                if( dataNodeName.equals( "othernode" ) ) {
                        final HikariConfig config = new HikariConfig();
                        config.setUsername( "otheruser" );
                        config.setPassword( "otherpass" );
                        config.setJdbcUrl( "otherurl" );
                        config.setOtherStuff( ... );
                        return new HikariDataSource( config );
                }

                throw new IllegalArgumentException( "Unknown dataNode: " + 
dataNodeName );
        }
}

Cheers,
- hugi


> On 23 Apr 2021, at 14:32, Tony Giaccone <t...@giaccone.org> wrote:
> 
> I have a datadomain with two datamaps, and two datasource each talking to a
> different database.
> 
> Right now, I have had the datasource configured in the config file, but I
> need to remove that and set it programmatically, from an environment
> variable.  Simple enough to do with a defauldata source, unclear how to do
> when you have multiple data sources and data nodes.
> 
> After browsing through the code and the app as it's running, it's unclear
> to me how to do this.
> 
> Does anyone know the secret sauce?
> 
> 
> 
> Tony

Reply via email to