在开发过程中,为了满足需求,会从第三方获取需要的数据,这个时候,除了使用原始的jdbc方式读取数据外,还可以配置多数据源来获取我们想要的数据。
第一步:pom.xml添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
第二步:yml文件配置
application.yml
# Tomcat
server:
port: 9999
spring:
# 环境 local/dev|prod
profiles:
active: dev
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
enabled: true
#mybatis
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com/example/work.*.entity
global-config:
#数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO
logic-delete-value: -1
logic-not-delete-value: 0
banner: false
#原生配置
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
application-dev.yml
spring:
# 数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
# 设置默认的数据源
primary: db1
datasource:
db1:
url: jdbc:mysql://127.0.0.1:3306/cup_report?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&useTimezone=true&serverTimezone=Asia/Shanghai
username: root
password: YWtzSHVPOmY5r1bAymMXD6qTS0reqef8yuibhI/4f6THnvhfDnQgSC40gVQgW1RhVtYIu7KRqCN963gR9YOTwQ==
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5 #启动程序时,在连接池中初始化多少个连接
max-active: 20 #连接池中最多支持多少个活动会话
min-idle: 5 #回收空闲连接时,将保证至少有minIdle个连接
max-wait: 60000 #程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池
filters: stat,slf4j
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJDhT8/x3jUFVnena578FT+42PV+wRK5XMYIS2GcUk7RyvnXdIov5Utwl+XOzmWfp1I1/QlMT8QdSkEIyd7+k+MCAwEAAQ==
connectionProperties: config.decrypt=true;config.decrypt.key=${publicKey};
db2:
url: jdbc:mysql://127.0.0.1:3306/cup?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&useTimezone=true&serverTimezone=Asia/Shanghai
username: root
password: YWtzSHVPOmY5r1bAymMXD6qTS0reqef8yuibhI/4f6THnvhfDnQgSC40gVQgW1RhVtYIu7KRqCN963gR9YOTwQ==
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5 #启动程序时,在连接池中初始化多少个连接
max-active: 20 #连接池中最多支持多少个活动会话
min-idle: 5 #回收空闲连接时,将保证至少有minIdle个连接
max-wait: 60000 #程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池
filters: stat,slf4j
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJDhT8/x3jUFVnena578FT+42PV+wRK5XMYIS2GcUk7RyvnXdIov5Utwl+XOzmWfp1I1/QlMT8QdSkEIyd7+k+MCAwEAAQ==
connectionProperties: config.decrypt=true;config.decrypt.key=${publicKey};
第三步:在启动类上加上如下配置
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class WorkApplication {
public static void main(String[] args) {
SpringApplication.run(WorkApplication.class, args);
}
}
DruidDataSourceAutoConfigure.class默认会帮我们自动配置单数据源,所以,如果想在项目中使用多数据源就需要排除它,手动指定多数据源。
第四步:启动程序
如上图所示,表明多数据源配置成功
前面的application-dev.yml配置文件我们配置了默认的数据源是db1,操作这个数据库的写法跟之前一样,那么我们要获取第三方数据该如何操作了,其实只需在实现类上加个注解即可
@Service
@DS("db2")
public class VmLogsServiceImpl extends ServiceImpl<VmLogsMapper, VmLogs> implements VmLogsService {
}
@DS(“db2”)这个注解就表示切换到db2这个数据源。