Spring Boot如何集成Oracle?

本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在这篇文章中,我们将讨论如何在Spring Boot应用中集成Oracle数据库。Oracle数据库是一种常用的关系型数据库,在企业级应用中具有广泛的应用。通过Spring Boot与Oracle数据库的集成,我们可以利用Spring Data JPA、JDBC等工具进行数据库操作,实现数据的持久化和访问。


一、Oracle数据库简介

Oracle数据库(Oracle DB)是一个关系型数据库管理系统(RDBMS),它采用结构化查询语言(SQL)来管理数据。Oracle数据库非常强大,提供了包括事务管理、并发控制、数据备份与恢复、安全管理等高级功能,适用于大规模和高并发的企业应用。


️ 二、在Spring Boot应用中集成Oracle数据库

2.1 添加Oracle JDBC依赖

首先,我们需要在Spring Boot项目中添加Oracle数据库的JDBC依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖:

<dependencies>
    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- Oracle JDBC Driver -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>19.8.0.0</version> <!-- 根据实际情况选择版本 -->
    </dependency>
</dependencies>

ojdbc8是Oracle的JDBC驱动程序,它支持Java 8和更高版本。确保版本与Oracle数据库的版本兼容。

2.2 配置数据库连接

application.propertiesapplication.yml文件中配置Oracle数据库的连接信息,包括数据库的URL、用户名、密码等。

示例:使用application.properties配置Oracle数据库连接

# Oracle数据库配置
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:ORCLPDB1
spring.datasource.username=your-username
spring.datasource.password=your-password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

# JPA配置
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# 数据源配置
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=20
spring.datasource.tomcat.min-idle=5
  • spring.datasource.url:连接Oracle数据库的URL,格式通常是jdbc:oracle:thin:@host:port:sid,其中sid是Oracle数据库实例的标识符。
  • spring.datasource.username:数据库用户名。
  • spring.datasource.password:数据库密码。
  • spring.jpa.database-platform:JPA使用的数据库方言,这里使用的是Oracle12cDialect

2.3 配置数据源和JPA

2.3.1 配置数据源

Spring Boot自动配置了数据源(DataSource),但如果需要自定义配置(如连接池),可以通过以下方式进行配置。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.context.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        DataSource dataSource = new DataSource();
        dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCLPDB1");
        dataSource.setUsername("your-username");
        dataSource.setPassword("your-password");
        dataSource.setMaxActive(20);
        dataSource.setMaxIdle(10);
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        return transactionManager;
    }
}

这里通过DataSource对象配置了Oracle数据库的连接池,并定义了一个事务管理器。

2.3.2 配置JPA实体管理工厂

Spring Boot默认启用JPA,可以使用LocalContainerEntityManagerFactoryBean来进一步配置JPA的实体管理工厂。

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
        @Qualifier("dataSource") DataSource dataSource) {
    return builder
            .dataSource(dataSource)
            .packages("com.example.yourapp.model")  // JPA实体类的包路径
            .persistenceUnit("oraclePU")
            .build();
}

2.4 使用Spring Data JPA进行数据库操作

Spring Data JPA是Spring的一个模块,它简化了与数据库的交互。你只需要定义一个Repository接口,Spring Data JPA会自动为你实现常见的CRUD操作。

2.4.1 创建JPA实体类

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

2.4.2 创建Repository接口

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}

在这个例子中,UserRepository继承自JpaRepository,Spring Data JPA会为你自动提供一些常见的CRUD操作方法。

2.5 使用Repository执行数据库操作

我们可以在服务层中注入UserRepository来执行数据库操作。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User createUser(String name, String email) {
        User user = new User();
        user.setName(name);
        user.setEmail(email);
        return userRepository.save(user);
    }

    public User getUserByName(String name) {
        return userRepository.findByName(name);
    }
}

🧑‍ 三、性能优化与常见问题

3.1 使用连接池进行性能优化

在高并发应用中,数据库连接池至关重要。Spring Boot默认使用HikariCP作为数据库连接池,它是一个高性能的连接池。你可以通过application.properties进一步优化连接池配置:

spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=600000
  • maximum-pool-size:设置连接池最大连接数。
  • minimum-idle:设置连接池最小空闲连接数。
  • idle-timeout:设置空闲连接最大超时。
  • max-lifetime:连接池中连接的最大生命周期。

3.2 缓存查询结果

对于高频查询,可以考虑在应用中使用缓存来减轻数据库压力。Spring Boot提供了缓存支持,可以结合Oracle数据库和缓存解决方案(如Redis或Ehcache)来优化性能。

启用缓存:

spring.cache.type=redis

然后,使用@Cacheable注解缓存查询结果:

@Cacheable("users")
public User getUserById(Long id) {
    return userRepository.findById(id).orElse(null);
}

3.3 事务管理

在进行复杂的数据库操作时,Spring的事务管理非常有用。你可以通过@Transactional注解来控制事务的提交与回滚:

import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void createUserAndDoSomethingElse() {
        // 创建用户
        User user = new User();
        user.setName("John");
        user.setEmail("john.doe@example.com");
        userRepository.save(user);

        // 执行其他业务操作
    }
}

@Transactional注解确保操作的原子性:如果有任何一个操作失败,所有操作都会回滚。


四、总结

在本文中,我们探讨了如何在Spring Boot应用中集成Oracle数据库,主要包括以下几个方面:

  1. 添加Oracle JDBC依赖:通过Maven将Oracle的JDBC驱动添加到Spring Boot项目中。
  2. 配置数据库连接:在application.properties文件中配置Oracle数据库的连接信息。
  3. 配置Spring Data JPA:通过@Entity定义JPA实体类,使用JpaRepository进行数据库操作。
  4. 性能优化:通过连接池、缓存机制和事务管理来优化性能。

通过这些步骤,你可以轻松将Oracle数据库集成到Spring Boot应用中,并利用Spring Data JPA简化数据库操作和事务管理。希望这篇文章能帮助你更好地理解如何在Spring Boot中使用Oracle数据库!

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

️ Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

  • 随机文章
  • 热门文章
  • 热评文章
热门