当前位置:首页 > 数据库 > 正文

Spring如何连接数据库配置?

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(推荐)

创建配置类:

Spring如何连接数据库配置? 第1张

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如何连接数据库配置? 第2张

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)

添加依赖:

Spring如何连接数据库配置? 第3张

<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> {}


安全与性能优化

  1. 敏感信息加密

    使用Jasypt加密数据库密码: spring.datasource.password=ENC(加密后的密文)

  2. 连接池调优
    • 设置合理的maximumPoolSize(建议=CPU核心数*2 + 磁盘数)
    • 监控连接泄漏:spring.datasource.hikari.leak-detection-threshold=60000
  3. 启用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

引用说明 参考以下权威资源:

  1. Spring官方文档 – Data Access
  2. HikariCP配置详解
  3. MySQL Connector/J参数手册
  4. OWASP数据库安全指南

0