1.Spring Boot 默认支持一个数据源的自动配置
当您在 Spring Boot 项目中引入数据库依赖(例如 spring-boot-starter-data-jpa
或 spring-boot-starter-jdbc
)时,它会自动进行一些默认配置,以便您可以轻松地使用单个数据源。
以下是一些默认的数据源自动配置行为:
-
数据源依赖:通过引入适当的 Spring Boot 数据库依赖,例如
spring-boot-starter-data-jpa
、spring-boot-starter-jdbc
或spring-boot-starter-data-mongodb
,您将获得对相应数据库的自动配置支持。 -
数据源配置属性:Spring Boot 提供了默认的数据源配置属性,您可以在应用程序的配置文件(如
application.properties
或application.yml
)中使用这些属性来配置单个数据源的连接信息。例如,您可以设置数据库的 URL、用户名、密码、驱动程序类等。 -
自动创建数据源:Spring Boot 根据配置文件中的属性自动创建数据源。它使用默认的连接池(如 HikariCP)来管理连接池和数据库连接。
-
默认的 JdbcTemplate:当您需要执行数据库操作时,Spring Boot 自动为您创建了一个
JdbcTemplate
bean。您可以通过@Autowired
注解将它注入到您的服务类中,并使用它执行 SQL 查询、更新等操作。
需要注意的是,默认的数据源自动配置适用于单个数据源的情况。如果您需要使用多个数据源,您可能需要进行额外的自定义配置,如设置多个数据源、配置多个 JdbcTemplate 等。但是,Spring Boot 仍然提供了便捷的方式来配置和管理多个数据源,您可以根据自己的需求进行扩展和定制。
2.多个数据源的配置
2.1yml文件配置
spring:
datasource:
# 第一个数据源
datasource1:
url: jdbc:mysql://localhost:3306/database1
username: user1
password: password1
driver-class-name: com.mysql.cj.jdbc.Driver
# 第二个数据源
datasource2:
url: jdbc:mysql://localhost:3306/database2
username: user2
password: password2
driver-class-name: com.mysql.cj.jdbc.Driver
2.2创建两个数据源的配置类 DataSourceConfig1.java
和 DataSourceConfig2.java
,分别配置数据源和相应的 JdbcTemplate
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class DataSourceConfig1 {
@Bean(name = "datasource1")
public DataSource dataSource1() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/database1")
.username("user1")
.password("password1")
.driverClassName("com.mysql.cj.jdbc.Driver")
.build();
}
@Bean(name = "jdbcTemplate1")
public JdbcTemplate jdbcTemplate1(@Qualifier("datasource1") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class DataSourceConfig2 {
@Bean(name = "datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/database2")
.username("user2")
.password("password2")
.driverClassName("com.mysql.cj.jdbc.Driver")
.build();
}
@Bean(name = "jdbcTemplate2")
public JdbcTemplate jdbcTemplate2(@Qualifier("datasource2") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
2.3最后,可以在业务代码中使用 @Qualifier
注解指定要使用的数据源 bean,并执行数据库操作
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final JdbcTemplate jdbcTemplate1;
private final JdbcTemplate jdbcTemplate2;
@Autowired
public UserService(@Qualifier("jdbcTemplate1") JdbcTemplate jdbcTemplate1,
@Qualifier("jdbcTemplate2") JdbcTemplate jdbcTemplate2) {
this.jdbcTemplate1 = jdbcTemplate1;
this.jdbcTemplate2 = jdbcTemplate2;
}
public void getUsersFromDataSource1() {
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate1.query(sql, new BeanPropertyRowMapper<>(User.class));
// 处理从数据源1中获取的用户数据
}
public void getUsersFromDataSource2() {
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate2.query(sql, new BeanPropertyRowMapper<>(User.class));
// 处理从数据源2中获取的用户数据
}
}
总结来说,Spring Boot 默认支持一个数据源的自动配置,并提供了方便的属性配置和默认的 JdbcTemplate 支持。对于多数据源的需求,您可以通过自定义配置来实现。