spring从一个数据库导数据到另一个数据库中jdbc 例子
时间: 2024-06-08 19:07:05 浏览: 112
不同数据库之间导数据
3星 · 编辑精心推荐
以下是一个简单的Spring JDBC示例,演示如何从一个数据库中读取数据并将其插入到另一个数据库中:
首先,您需要在pom.xml文件中添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
```
其中,spring-jdbc依赖项包含Spring JDBC框架,而h2依赖项是一个嵌入式数据库,我们将在此示例中使用它。
接下来,您需要创建两个数据源bean,分别指向源数据库和目标数据库。假设源数据库是MySQL,目标数据库是H2,您可以按照以下方式创建这些bean:
```java
@Configuration
public class AppConfig {
@Bean
public DataSource mysqlDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/source_db");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public DataSource h2DataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.build();
}
}
```
其中,mysqlDataSource bean使用Spring的DriverManagerDataSource类配置一个JDBC数据源,该数据源连接到名为source_db的MySQL数据库。同样,h2DataSource bean使用嵌入式H2数据库创建一个数据源,并在创建数据库时运行一个SQL脚本。
接下来,您需要编写一个JdbcTemplate bean,用于执行SQL查询和更新操作。JdbcTemplate类是Spring JDBC框架的核心类之一,它为您提供了简单的API来执行SQL。
```java
@Configuration
public class AppConfig {
// 省略mysqlDataSource和h2DataSource的配置
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(mysqlDataSource());
}
}
```
现在,您可以编写一个简单的程序来从MySQL数据库读取数据并将其插入到H2数据库中。以下是一个示例程序:
```java
@Component
public class DataMigrator {
private final JdbcTemplate jdbcTemplate;
private final DataSource h2DataSource;
@Autowired
public DataMigrator(JdbcTemplate jdbcTemplate, DataSource h2DataSource) {
this.jdbcTemplate = jdbcTemplate;
this.h2DataSource = h2DataSource;
}
public void migrateData() {
List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM source_table");
JdbcTemplate h2JdbcTemplate = new JdbcTemplate(h2DataSource);
rows.forEach(row -> {
h2JdbcTemplate.update("INSERT INTO target_table (id, name) VALUES (?, ?)",
row.get("id"), row.get("name"));
});
}
}
```
其中,DataMigrator类使用@Autowired注释注入JdbcTemplate和H2 DataSource bean。然后,它使用queryForList方法从源表中检索所有行,并使用forEach循环将它们插入到目标表中。
最后,您可以在Spring应用程序的主类中调用DataMigrator类的migrateData方法来执行数据迁移。
这是一个非常基本的示例,您可以根据需要进行修改和扩展。例如,您可以使用Spring的事务管理API来确保数据迁移是原子操作,并在迁移过程中处理异常。
阅读全文