簡體   English   中英

如何從一個數據源讀取對象並使用spring數據寫入另一個數據源?

[英]How can I read object from one datasource and write to another with spring data?

我有一個配置類:

@SpringBootConfiguration
    @ComponentScan(basePackages = "vap")

    public class AppConfig {


        Logger logger = LoggerFactory.getLogger(this.getClass());
        public AppConfig() {
        }

        @Bean
        public ServerRuntime runtime() {
            ServerRuntime runtime = ServerRuntime.builder().addConfig("cayenne-project.xml").build();
            return runtime;
        }

        @Bean
        public ObjectContext getContext(@Autowired ServerRuntime serverRuntime) {
            return serverRuntime.newContext();
        }


        @Bean(name = "pgDataSource")
        public DataSource getDataSource() {
            Properties props = new Properties();
            props.setProperty("user", "postgres");
            props.setProperty("password", "");
            PoolConfiguration configuration = new PoolProperties();
            configuration.setDbProperties(props);
            configuration.setUrl("jdbc:postgresql://localhost/mikro00");
            configuration.setDriverClassName("org.postgresql.Driver");
            DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource(configuration);
            return dataSource;
        }

        @Bean(name = "hsqldbDataSource")
        public DataSource getHSQLDataSource() {
            Properties props = new Properties();
            props.setProperty("user", "sa");
            props.setProperty("password", "");


            PoolConfiguration configuration = new PoolProperties();
            configuration.setDbProperties(props);
            configuration.setUrl("jdbc:h2:file:./outbase");
            configuration.setDriverClassName("org.h2.Driver");
            DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource(configuration);
            return dataSource;
        }


    }

我的PGConfig.java

@Configuration
@EnableTransactionManagement
public class PGConfig {

    @Primary
    @Bean(name = "entityManagerFactoryPG")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier(value = "pgDataSource") DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean vap = builder.dataSource(dataSource)
                .packages("vap")
                .build();
        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        vap.setJpaVendorAdapter(jpaVendorAdapter);
        return vap;
    }

    @Primary
    @Bean(name = "transactionManagerPG")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory
                    entityManagerFactory
    ) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

我的H2Config.java

@Configuration
@EnableTransactionManagement
public class H2Config {

    @Primary
    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier(value = "hsqldbDataSource") DataSource dataSource){
        LocalContainerEntityManagerFactoryBean vap = builder.dataSource(dataSource)
                .packages("vap")
                .build();
        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        vap.setJpaVendorAdapter(jpaVendorAdapter);
        return vap;

    }

    @Primary
    @Bean(name = "transactionManagerH2")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory
                    entityManagerFactory
    ) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

KlientRepository

@Repository
public interface KlientRepository extends CrudRepository<Klient,Integer> {
}

如何從一個存儲庫讀取Klient並寫入另一個存儲庫。 我需要從PG讀取數據,並保存到h2。 我無法找到具有不同數據源的存儲庫的兩個對象,或者只是使用具體數據源創建存儲庫對象

您的代碼中幾乎包含了所有內容,您只需要進行一些微調就可以了

  1. 使用數據源的bean聲明創建兩個配置類,EntityManagerFactory和TransactionManager
  2. 將兩者之一標記為主要
  3. 創建兩個模型類(每個數據庫模型一個)
  4. 在兩個不同的包中創建兩個存儲庫類**(非常重要)**
  5. 在您的服務類“自動裝配”兩個存儲庫中,從一個數據庫讀取數據,進行操作並保存到其他數據庫。

代碼中唯一缺少的是您需要告訴Spring哪個Repository類應使用哪個EntityManager / Datasource(因為有兩個)。 這可以通過Annotation @EnableJpaRepositories(basepackages=...) 在每個配置類上使用此批注,其中basePackages指示您的存儲庫類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM