Micronaut FunctionInitializer переопределяет свойства приложения - PullRequest
0 голосов
/ 04 августа 2020
@Singleton
public class TestFunction extends FunctionInitializer {
    Logger log = LoggerFactory.getLogger(TestFunction.class);

    public TestFunction() {
    }

    public String execute() {
        return "Hello";
    }

}

Я хочу программно переопределить свойства источника данных в файле application.yml, но без использования прослушивателя событий, созданного компонентом. Есть ли способ сделать это. Это похоже на создание настраиваемого контекста приложения со свойствами.

Я использовал следующий подход для прокси-сервера Micronaut API.

public class StreamLambdaHandler implements RequestStreamHandler {
.......
public StreamLambdaHandler() {
        try {
            log.info("Initializing Lambda Container");
            this.dbCredentialService = new DBCredentialService();
            // Get updated database credential map
            Map<String, Object> props = this.dbCredentialService.getDbCredential();
            // Create application context builder with updated properties
            // i.e Override datasources properties in application.yml
            builder = ApplicationContext.build().properties(props);
            handler = new MicronautLambdaContainerHandler(builder);
      }....
    ........
}

Можем ли мы сделать что-то подобное с FunctionInitializer?

1 Ответ

1 голос
/ 05 августа 2020

Если вы планируете переопределить только свойства учетных данных источника данных, это можно сделать следующим образом.

@Factory
public class HikariDataSourceFactory {

    @Bean
    @Primary
    public DataSource dataSource(DBCredentialService credentialService) throws URISyntaxException {

        Map<String, Object> credentials = this.dbCredentialService.getDbCredential();
        String username = "user";
        String password = credentials.get("username");  
        
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:postgresql://localhost:5432/postgres");
        config.setUsername(username);
        config.setPassword(password);
        config.setDriverClassName("org.postgresql.Driver");

        return new HikariUrlDataSource(config);
    }
}
...