Spring如何连接数据库配置?

Spring通过配置文件(如application.yml)设置数据库连接,需指定驱动类、URL、用户名、密码及连接池参数(如HikariCP),自动注入DataSource实现数据库交互。

在Spring应用中配置数据库连接是核心任务之一,确保应用能高效、安全地访问数据,以下是详细配置指南,涵盖主流方案及最佳实践:

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

# 数据源配置
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自动注入DataSourceJdbcTemplate,无需手动声明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:

Spring如何连接数据库配置?

@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数据库安全指南

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/18392.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月10日 16:49
下一篇 2025年6月10日 16:54

相关推荐

  • MySQL如何查数据库编码格式

    登录MySQL后执行status;或查询系统变量: ,SHOW VARIABLES LIKE ‘character_set%’; ,SHOW VARIABLES LIKE ‘collation%’; ,重点关注character_set_server、character_set_database等变量值,如utf8mb4。

    2025年6月9日
    200
  • 如何安装用友T6数据库?教程分享

    安装用友T6前,需先安装Microsoft SQL Server数据库软件(建议2005或2008版),安装SQL Server成功后,再运行T6安装程序,过程中会自动连接并配置所需数据库。

    2025年6月8日
    100
  • 如何快速复制表格中的一列数据?

    在数据库管理工具中,使用SQL命令SELECT 列名 INTO 新表名 FROM 原表名可快速复制列并创建新表,也可在工具界面直接拖拽该列或导出再导入目标位置,无需手动输入。

    2025年6月14日
    100
  • Ajax怎么连接数据库实战?

    AJAX不能直接连接数据库,需通过后端脚本(如PHP/Python)作为中介,前端发送AJAX请求到后端API,后端处理数据库操作并返回数据,前端接收展示结果。

    2025年5月31日
    700
  • Excel如何连接SQLite数据库?

    Excel本身不支持直接操作SQLite数据库,需要通过外部工具或方法实现,,1. 使用ODBC驱动连接SQLite,在Excel中通过数据查询导入或链接数据。,2. 利用Excel的Power Query功能连接SQLite文件进行数据获取和转换。,3. 借助第三方插件或编程语言(如Python)作为桥梁操作数据。

    2025年6月11日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN