上一篇
Spring通过配置文件(如application.yml)设置数据库连接,需指定驱动类、URL、用户名、密码及连接池参数(如HikariCP),自动注入DataSource实现数据库交互。
在Spring应用中配置数据库连接是核心任务之一,确保应用能高效、安全地访问数据,以下是详细配置指南,涵盖主流方案及最佳实践:
基础配置步骤
添加数据库驱动依赖
在pom.xml中引入驱动和连接池(以MySQL和HikariCP为例):
<dependencies>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- HikariCP连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
<!-- Spring JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
配置数据源
Java Config(推荐)
创建配置类:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("securePassword123");
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
config.setMaximumPoolSize(20); // 连接池大小
return new HikariDataSource(config);
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
XML配置
在applicationContext.xml中:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="securePassword123"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="maximumPoolSize" value="20"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
使用JdbcTemplate操作数据库
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> getUsers() {
String sql = "SELECT id, name FROM users";
return jdbcTemplate.query(sql, (rs, rowNum) ->
new User(rs.getInt("id"), rs.getString("name"))
);
}
}
Spring Boot自动化配置
Spring Boot简化配置,只需application.properties:
# 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=securePassword123 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Hikari连接池优化 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.connection-timeout=30000
Spring Boot自动注入DataSource和JdbcTemplate,无需手动声明Bean。
高级场景解决方案
多数据源配置
@Configuration
public class MultiDataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
}
application.properties:

# 主数据源 spring.datasource.primary.url=jdbc:mysql://host1:3306/db1 spring.datasource.primary.username=user1 # 从数据源 spring.datasource.secondary.url=jdbc:mysql://host2:3306/db2 spring.datasource.secondary.username=user2
集成ORM框架(如JPA)
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
配置实体类和Repository:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters & Setters
}
public interface UserRepository extends JpaRepository<User, Long> {}
安全与性能优化
- 敏感信息加密
使用Jasypt加密数据库密码:
spring.datasource.password=ENC(加密后的密文)
- 连接池调优
- 设置合理的
maximumPoolSize(建议=CPU核心数*2 + 磁盘数) - 监控连接泄漏:
spring.datasource.hikari.leak-detection-threshold=60000
- 设置合理的
- 启用SSL/TLS
在JDBC URL中添加useSSL=true并配置证书。
常见问题排查
| 问题现象 | 解决方案 |
|---|---|
Connection refused |
检查数据库IP、端口及防火墙设置 |
Access denied for user |
核对用户名/密码,验证数据库权限 |
HikariPool-1 idle timeout |
增大connection-timeout值 |
| 多数据源冲突 | 使用@Primary标记主数据源 |
正确配置数据库连接是Spring应用稳定运行的基石,关键实践包括:
- 使用连接池(如HikariCP)提升性能
- 敏感信息加密保障安全
- Spring Boot自动化配置减少样板代码
- 多数据源场景明确标注
@Primary
引用说明 参考以下权威资源:
- Spring官方文档 – Data Access
- HikariCP配置详解
- MySQL Connector/J参数手册
- OWASP数据库安全指南
