Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤
作者:Mingshan 发布时间:2023-10-12 13:20:39
前言
最近项目需要和Oracle数据库进行交互,然后我从Maven中央仓库下载数据库驱动jar包,但怎么都下不下来,我到Oracle官网上一看,我去,居然不让用Maven直接下(大学时候用过Oracle,很久远的事情了0rz),没办法我还是直接下载jar包放到我的项目里面吧。SpringBoot项目引入外部jar包是非常方便的,包含打引入外部jar等操作。
我的做法如下:
首先在src同级目录建一个lib文件夹,将第三方jar包放到这个文件内,比如我将ojdbc6.jar 这个jar包放到这个地方。
接着我们需要在pom.xml文件里配置jar的maven坐标,不过这个坐标比较特殊,我们需要直接定位到我们上一步添加的文件,而不是从Maven仓库里面去下载,以ojdbc6.jar为例,配置依赖如下:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc6.jar</systemPath>
</dependency>
这里比较特殊的是systemPath,常见的Maven坐标是没有这个的,这里面直接指定该jar的相对路径(相对项目的根目录),这样Maven在编译的时候就不会从中央仓库里面去下载该jar包了。但只配置这个还不行,还需要配置SpringBoot编译时插件属性includeSystemScope,具体如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
上面配置完毕,我们就可以直接执行mvn clean install进行打包,然后我们查看打好的jar包里面包含的jar包,会发现ojdbc6.jar这个包已经正确被包含进去了。
由于对接的项目比较老,要与其数据库进行交互,而且数据库类型不一致,所以我们的项目需要支持多数据源(接口平台),这个还是非常好配置的,SpringBoot给我们提供了多数据源配置的方案,并且每个数据源对应一个JdbcTemplate,这样就方便很多,具体配置如下:
application.properties文件内配置多数据源信息
首先在application.properties或者yml文件内配置多数据源信息,具体配置如下:
# ds1数据源配置
spring.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ds1.url=jdbc:mysql://localhost:3306/zz?useUnicode=true&characterEncoding=utf8
spring.datasource.ds1.username=zz
spring.datasource.ds1.password=zz
# ds2数据源配置
spring.datasource.ds2.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.ds2.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.ds2.username=system
spring.datasource.ds2.password=050508
指定数据源与配置信息
上面我们配置好了数据源,但是已经不是SpringBoot默认的数据源配置信息了,所以我们还要指定不同的数据源实例对应哪个配置信息,配置如下:
/**
* 多数据源配置
*/
public class DataSourceConfig {
/**
* ds1数据源配置
*
* @return 配置信息
*/
(name = "ds1DataSourceProperties")
(prefix = "spring.datasource.ds1")
public DataSourceProperties ds1DataSourceProperties() {
return new DataSourceProperties();
}
/**
* ds1数据源
*
* @param dataSourceProperties 配置信息
* @return 数据源实例
*/
(name = "ds1DataSource")
public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
/**
* ds2数据源配置
*
* @return 配置信息
*/
(name = "ds2DataSourceProperties")
(prefix = "spring.datasource.ds2")
public DataSourceProperties ds2DataSourceProperties() {
return new DataSourceProperties();
}
/**
* ds2数据源
*
* @param dataSourceProperties 配置信息
* @return 数据源实例
*/
(name = "ds2DataSource")
public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
}
配置JdbcTemplate与数据源关系
配置完数据源信息,我们想直接用不同的JdbcTemplate来操作不同的数据库,所以我们还要创建几个JdbcTemplate实例,并且这些实例与不同的数据源进行绑定,配置信息如下:
/**
* JdbcTemplate 多数据源配置
*
* @author 明山
* @see DataSourceConfig
*/
public class JdbcTemplateDataSourceConfig {
/**
* ds1 JdbcTemplate 配置
*
* @param dataSource 数据源
* @return JdbcTemplate
*/
(name = "ds1JdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("ds1DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
/**
*ds2 JdbcTemplate 配置
*
* @param dataSource 数据源
* @return JdbcTemplate
*/
(name = "ds2JdbcTemplate")
public JdbcTemplate hdwmsJdbcTemplate(@Qualifier("ds2DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
使用JdbcTemplate
配置完后,我们可以直接在具体的类中使用了,使用方式如下:
("ds1JdbcTemplate")
private JdbcTemplate ds1JdbcTemplate;
("ds2JdbcTemplate")
private JdbcTemplate ds2JdbcTemplate;
来源:https://mingshan.fun/2020/06/09/springboot-three-party-jar/
猜你喜欢
- 一、实现方式@ConfigurationProperties 注解(最好加上前缀prefix=“person”,标明是和配置文件中哪个开头的
- 具体代码如下所示:***web.xml***<?xml version="1.0" encoding="
- 这篇文章主要介绍了spring boot如何实现切割分片上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 实现的效果图:自定义Fragment继承BottomSheetDialogFragment重写它的三个方法:onCreateDialog()
- 引言在高并发的场景下,异步是一个极其重要的优化方向。前段时间,生产环境发生一次事故,笔者认为事故的场景非常具备典型性 。写这篇文章,笔者想和
- 之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,
- Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1。Mybatis-Plus原生提供了很多单表操作的方法,极大
- 1.概述在本教程中,我们将讨论如何使用Spring Security OAuth和Spring Boot实现SSO - 单点登录。我们将使用
- 反射方式获取JPA Entity属性和值在记录日志或者调试的时候,往往需要输出数据库查询或者写入的值,或者在接 * 互的时候,可能需要将实体转
- Pom依赖<parent> <groupId>org.springframework.bo
- Android 应用签名的两种方法一、使用pem签名 (一) apk签名命令java –jar sign
- 在项目迁移到Spring Boot之后,发生内存使用量过高的问题。本文介绍了整个排查过程以及使用到的工具,也非常适用于其他堆外内存排查。背景
- 方法重载概述方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法互相构成重载* 多个方法在同一个类中* 多个放方法具有相同方
- 一、前言(吐槽+煽情+简介) &n
- 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Java Archive,即j
- Java BufferWriter写文件之后文件是空的或者数据不全在编程的过程中,读写文件是非常常见的操作,在这里我问介绍一下最近我遇到的集
- Spring 配置文件报错:元素 "context:component-scan" 的前缀 "context&
- IO流Java中IO流分为两种,字节流和字符流,顾名思义字节流就是按照字节来读取和写入的,字符刘是按照字符来存取的;常用的文件读取用的就是字
- 拆分实现流程请看下面这张图首先我们得对线程池进行一个功能拆分Thread Pool 就是我们的线程池,t1,t2,t3代表三个线程Block
- [LeetCode] 205. Isomorphic Strings 同构字符串Given two strings s