springboot 2.X.X 和1.x.x两个版本下集成jpa报错:jdbcUrl is required with driverClassName

本文深入探讨了SpringBoot 2.0升级后数据源配置的变化,揭示了配置项spring.datasource.jdbc-url和spring.datasource.driver-class-name的正确使用方法,以及如何避免常见配置错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot版本问题向来让人恶心,和大家分享下这个bug吧

问题重现:

   看网上有人说而在2.0升级之后需要变更成:spring.datasource.jdbc-url和spring.datasource.driver-class-name即可解决!

但是本人按照提示操作后,并没有作用。

后来分析,boot升级到2.0之后对于配置文件的解析做了一定的修改,按照如图配置,是没有问题的,bug瞬间消失

进去看DataSourceProperties类的源码,发现:读取配置后,这里面转化成了driverClassName,也就事说,配置中的数据源数据,加载到这个类里面后,在继续运行就不会出错

 

 

 

### 使用 MyBatis JPA集成使用 #### 集成概述 MyBatis 是一种流行的持久层框架,它简化了数据库操作并允许开发者通过 XML 或注解定义 SQL 查询语句。JPA (Java Persistence API) 则提供了一种面向对象的方式来管理关系型数据库中的数据。两者可以共存于同一个项目中,各自处理不同类型的业务逻辑。 对于希望在同一应用程序内同时利用这两种技术的情况,通常的做法是在不同的模块或包下分别配置它们,并确保事务管理依赖注入的一致性[^1]。 #### Maven 依赖设置 为了在一个基于 Spring Boot 的应用里引入 MyBatis 及其通用 Mapper 插件支持 JPA 功能,可以在 `pom.xml` 文件中加入如下依赖: ```xml <dependencies> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency> <!-- MyBatis Generic Mapper Plugin --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <!-- JPA Support --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Database Driver Example: H2 or MySQL etc., choose one according to your needs --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 上述代码片段展示了如何为 Spring Boot 应用添加必要的库支持以便能够同时使用 MyBatis JPA 技术栈[^2]。 #### 数据源配置 当存在多个数据访问机制时,建议明确区分各自的 DataSource 设置。可以通过自定义属性文件或者直接在 application.properties 中指定特定前缀的方式来进行隔离: ```properties # For MyBatis Data Source Configuration spring.datasource.mybatis.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC spring.datasource.mybatis.username=root spring.datasource.mybatis.password=password spring.datasource.mybatis.driver-class-name=com.mysql.cj.jdbc.Driver # For JPA/Hibernate Data Source Configuration spring.datasource.jpa.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MYSQL spring.datasource.jpa.username=sa spring.datasource.jpa.password= spring.datasource.jpa.driverClassName=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect ``` 这里给出了两个独立的数据连接字符串例子——一个是针对 MyBatis 连接到 MySQL 实例;另一个则是供 JPA 使用的内存型 H2 数据库实例。 #### 编写 Repository 接口 接下来就是按照惯例分别为两种 ORM 工具创建对应的仓库接口。对于 MyBatis 来说,这涉及到定义带有 @Mapper 注释的接口以及相应的映射器 XML 文件;而 JPA 方面则只需继承 JpaRepository 即可获得基本 CRUD 方法的支持。 ##### MyBatis Mapper Interface ```java import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper { List<User> findAll(); } ``` ##### JPA Repository Interface ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<UserEntity, Long> {} ``` 以上两段 Java 代码分别代表了一个简单的用户查询服务实现方式,在实际开发过程中可以根据需求进一步扩展这些接口的功能。 #### 处理多数据源场景下的事务传播行为 考虑到可能会遇到跨数据源的操作情况,应当合理规划好事务边界及其传播特性。一般而言,推荐采用编程式事务控制来解决此类复杂度较高的问题,即借助 TransactionTemplate 类手动开启/提交事物单元。 ```java @Autowired private PlatformTransactionManager transactionManager; @Transactional(propagation = Propagation.REQUIRED) public void performComplexOperation() throws Exception { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); try { // Perform operations across multiple data sources here... transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); throw e; } } ``` 这段示例说明了怎样围绕着来自不同存储系统的资源执行一系列原子性的更改动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值