0

I'm using Spring data R2DBC and I can connect in localhost my project with my database using this code:

public class R2dbcConfig extends AbstractR2dbcConfiguration {

    private final ApplicationDatabaseProperties applicationDatabaseProperties;

    @Bean
    @Override
    public ConnectionFactory connectionFactory() {
        return new MssqlConnectionFactory(
                MssqlConnectionConfiguration.builder()
                        .host(applicationDatabaseProperties.getHost())
                        .port(applicationDatabaseProperties.getPort())
                        .username(applicationDatabaseProperties.getUsername())
                        .password(applicationDatabaseProperties.getPassword())
                        .database(applicationDatabaseProperties.getDatabase())
                        .build());
    }

    @Bean
    public DatabaseClient databaseClient(ConnectionFactory connectionFactory) {
        return DatabaseClient.create(connectionFactory);
    }
}

Obvioulsy a applicationDatabaseProperties has parameters of database's connection, but in other enviroment I have a connection string like this: jdbc:sqlserver://[myhost]:1433;database=[mydatabase];user=[myUser];password={your_password_here};encrypt=true;trustServerCertificate=false;hostNameInCertificate=[myhostNameInCertificate];loginTimeout=30;

I've used MssqlConnectionFactory (mssql) and I could view host, port, database, user and password but I couldn't set encrypt parameter in true, is there a way to set this parameter using that class (MssqlConnectionFactory and MssqlConnectionConfiguration).

Thanks for your answers.

zforgo
  • 2,508
  • 2
  • 14
  • 22
chavalife17
  • 162
  • 1
  • 2
  • 10

2 Answers2

1

Following the documentation you can create ConnectionFactory and Connection objects programmatically.

@Bean
@Override
public ConnectionFactory connectionFactory() {

    final ConnectionFactoryOptions options = builder()
            .option(DRIVER, "sqlserver")
            .option(HOST, applicationDatabaseProperties.getHost())
            .option(PORT, applicationDatabaseProperties.getPort())
            .option(USER, applicationDatabaseProperties.getUsername())
            .option(PASSWORD, applicationDatabaseProperties.getPassword())
            .option(DATABASE, applicationDatabaseProperties.getDatabase())
            .option(Option.valueOf("[ANOTHER_OPTION]","[ANOTHER_VALUE"))
            .build();

    return ConnectionFactories.get(options);
}

In this case you can put any other parameret that you need like:

            .option(Option.valueOf("encrypt", Boolean.TRUE))
zforgo
  • 2,508
  • 2
  • 14
  • 22
0
private final ConnectionFactory connectionFactory;

@Autowired // inject default ConnectionFactory
public ReactivePostgresConfig(ConnectionFactory connectionFactory) {
    this.connectionFactory = connectionFactory;
}

@Override
// modify (mutate) default ConnectionFactory and return
public @NotNull ConnectionFactory connectionFactory() {

    // get the default connection factory configurations (options)
    OptionsCapableConnectionFactory factory = OptionsCapableConnectionFactory.unwrapFrom(this.connectionFactory);
    ConnectionFactoryOptions options = factory.getOptions();

    // add encryption option
    options.mutate().option(Option.valueOf("encrypt"), Boolean.TRUE);

    // return the mutated connection factory
    return ConnectionFactories.get(options);
}
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jun 07 '23 at 07:57