帮我写一个springboot多数据源配置的完整demo
时间: 2023-10-20 10:10:47 浏览: 51
好的,下面是一个完整的Spring Boot多数据源配置的示例:
1.首先在pom.xml文件中添加以下依赖:
```xml
<dependencies>
<!-- Spring Boot Starter JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Druid Data Source -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
```
2.在application.yml文件中添加数据源配置:
```yaml
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/primary?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/secondary?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
```
3.创建数据源配置类:
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
}
```
4.创建JdbcTemplate配置类:
```java
@Configuration
public class JdbcTemplateConfig {
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
```
5.在业务代码中使用指定的数据源:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate primaryJdbcTemplate;
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate secondaryJdbcTemplate;
@Override
public void saveUser(User user) {
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
primaryJdbcTemplate.update(sql, user.getName(), user.getAge());
}
@Override
public List<User> getAllUsers() {
String sql = "SELECT * FROM user";
return secondaryJdbcTemplate.query(sql, (ResultSetExtractor<List<User>>) rs -> {
List<User> users = new ArrayList<>();
while (rs.next()) {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
users.add(user);
}
return users;
});
}
}
```
上面的示例中,我们定义了两个数据源primary和secondary,并且分别创建了对应的JdbcTemplate实例,最后在业务代码中通过@Qualifier注解来指定使用哪个数据源的JdbcTemplate。