gpt4 book ai didi

java - 如何从一个数据源读取对象并使用 Spring 数据写入另一个数据源?

转载 作者:行者123 更新时间:2023-12-02 11:57:31 25 4
gpt4 key购买 nike

我有一个配置类:

@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);
}

}

客户端存储库

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

如何从一个存储库读取客户端并写入另一个存储库。我需要从 PG 读取数据,处理数据并保存到 h2。我找不到如何使用不同数据源的两个存储库对象,或者只是使用具体数据源创建存储库对象

最佳答案

您的代码中几乎包含了所有内容,您只需要进行一些微调即可

  1. 使用 Datasource、EntityManagerFactory 和 TransactionManager 的 bean 声明创建两个配置类
  2. 将两者之一标记为主
  3. 创建两个模型类(每个数据库模型一个)
  4. 在两个不同的包中创建两个 Repository 类**(非常重要)**
  5. 在您的服务类中自动连接两个存储库,从一个数据库读取、操作并保存到另一个数据库。

代码中唯一缺少的是您需要告诉 Spring 哪个 Repository 类应该使用哪个 EntityManager/Datasource(因为您有两个)。这可以通过注释@EnableJpaRepositories(basepackages=...)来完成。在每个配置类上使用此注释,并使用 basePackages 指示您的存储库类

关于java - 如何从一个数据源读取对象并使用 Spring 数据写入另一个数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47483232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com