如何创建 Hazelcast 数据源

问题描述 投票:0回答:1

大家好,我目前正在尝试将 Hazelcast 用作 Spring Batch 的持久层,为此我需要创建一个由 Hazelcast 支持的数据源。 这样,像 Spring Batch 和 Spring Data 这样的项目就可以使用 Hazelcast + Spring Integration 提供的 Repository 和 TransactionManager。

有谁知道如何创建指向 Hazelcast 的数据源?

我试过像这样定义一个 bean 但无济于事它不起作用:

@Configuration
public class DataSourceConfig {

//    @Value("${spring.datasource.url}")
//    String url;
//    @Value("${spring.datasource.username}")
//    String userName;
//    @Value("${spring.datasource.password}")
//    String pwd;

    @SneakyThrows
    @Bean
    public JobRepository hazelCastJobRepo(DataSource dataSource, HazelcastTransactionManager hazelcastTransactionManager){
        JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
        jobRepositoryFactoryBean.setDataSource(dataSource);
        jobRepositoryFactoryBean.setDatabaseType("POSTGRES");
        jobRepositoryFactoryBean.setTransactionManager(hazelcastTransactionManager);
        return jobRepositoryFactoryBean.getObject();
    }

    @Bean
    public HazelcastInstance hazelcastInstance() {
        ClientConfig config = new ClientConfig();
        config.setClusterName("dev");
        return HazelcastClient.newHazelcastClient(config);
    }

    @Bean
    public HazelcastTransactionManager hazelcastTransactionManager(HazelcastInstance hazelcastInstance) {
        return new HazelcastTransactionManager(hazelcastInstance);
    }

    @Bean
    public JobBuilderFactory jobBuilderFactory(JobRepository hazelCastJobRepo){
        JobBuilderFactory jobBuilderFactory = new JobBuilderFactory(hazelCastJobRepo);
        return jobBuilderFactory;
    }

    @Bean
    public StepBuilderFactory stepBuilderFactory(JobRepository hazelCastJobRepo, HazelcastTransactionManager hazelcastTransactionManager){
        StepBuilderFactory stepBuilderFactory = new StepBuilderFactory(hazelCastJobRepo, hazelcastTransactionManager);
        return stepBuilderFactory;
    }

    @Bean
    public JobExplorer jobExplorer(){
        JobInstanceDao jdbcJobInstanceDao = new JdbcJobInstanceDao();
        JobExecutionDao jobExecutionDao = new JdbcJobExecutionDao();
        StepExecutionDao stepExecutionDao = new JdbcStepExecutionDao();
        ExecutionContextDao executionContextDao = new JdbcExecutionContextDao();
        return new SimpleJobExplorer(jdbcJobInstanceDao, jobExecutionDao, stepExecutionDao, executionContextDao);
    }

    @Bean
    public ListableJobLocator listableJobLocator(){
        return new MapJobRegistry();
    }

    @Bean
    public DataSource dataSource() {
        return new DriverDataSource("jdbc:mysql://127.0.0.1:5701", "com.hazelcast.datastore.JdbcDataStoreFactory", new Properties(), "", "");
    }

}
java spring spring-integration datasource hazelcast
1个回答
0
投票

com.hazelcast.config.Config

/**
 * Adds an external data store configuration.
 * <p>
 * <p>
 * Example:
 * <pre>{@code
 *      Config config = new Config();
 *      Properties properties = new Properties();
 *      properties.put("jdbcUrl", jdbcUrl);
 *      properties.put("username", username);
 *      properties.put("password", password);
 *      ExternalDataStoreConfig externalDataStoreConfig = new ExternalDataStoreConfig()
 *              .setName("my-jdbc-data-store")
 *              .setClassName(JdbcDataStoreFactory.class.getName())
 *              .setProperties(properties);
 *      config.addExternalDataStoreConfig(externalDataStoreConfig);
 * }</pre>
 *
 * @since 5.2
 */
@Beta
public Config addExternalDataStoreConfig(ExternalDataStoreConfig externalDataStoreConfig) {

注册外部数据存储。

然后看起来你需要做这样的事情:

NodeEngineImpl nodeEngine = Util.getNodeEngine(hazelcastInstance);
ExternalDataStoreFactory<?> dataStoreFactory = nodeEngine.getExternalDataStoreService().getExternalDataStoreFactory(name);

并称其为

getDataStore()
.

这是自 Hazelcast 以来的新东西

5.2
看起来我们真的需要它用于它的 Jet 流处理器。不确定如果它仍然是外部数据库,为什么要处理 Hazelcast 外观,因此您只需为该
DataSource
.
 配置常规
jdbc:mysql://127.0.0.1:5701

© www.soinside.com 2019 - 2024. All rights reserved.