今天遇到一个业务问题 一个项目需要根据需求。到多个数据库进行查询。下面就是一个简单案列:
springboot项目
首先,我们需要导入相关依赖
MySQL依赖(根据MySQL版本选择适当的依赖):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>版本号</version>
</dependency>
Oracle依赖(根据Oracle版本选择适当的依赖):
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>版本号</version>
</dependency>
Druid连接池依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>版本号</version>
</dependency>
请确保在您的项目的pom.xml文件中添加这些依赖,并将版本号替换为实际使用的版本号。一旦您导入了这些依赖,就可以在您的应用程序中使用多个数据源,并按照配置文件中描述的方式进行配置。
然后。我们在配置文件中配置多个数据源
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admssin
loginPassword: 1555456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://25.196.0.36:3506/acs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: rosot
password: daaaaa9r
# 辅库数据源
zzb:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://29.156.3.58:3306/zzb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: rooaat
password: GLerdasdf9r
# ORACLE数据源
acorcl:
url: jdbc:oracle:thin:@10.34.125.45:1231/dsdb
username: d2s
password: dqqqq
这段配置文件是一个YAML格式的Spring Boot应用程序配置文件,其中包含了关于数据源(DataSource)的配置信息。
根据配置文件内容,可以得到以下信息:
druid.stat-view-servlet.enabled属性被设置为true,表示启用Druid的Web监控页面。
druid.stat-view-servlet.loginUsername和druid.stat-view-servlet.loginPassword属性分别设置了Druid监控页面的登录用户名和密码。
dynamic.druid下的属性配置了Druid连接池的一些参数,例如连接池的初始大小、最小空闲连接数、最大活跃连接数以及其他一些连接池的配置。
dynamic.datasource下定义了多个数据源,每个数据源都有一个名称作为键,然后指定了该数据源的驱动类名、URL、用户名和密码等相关配置。
具体来说,配置文件中列举了三个数据源:
master:主库数据源,使用MySQL数据库。
zzb:ZXB数据源,也使用MySQL数据库。
acorcl:ACORCL数据源,使用Oracle数据库。
对于每个数据源,都提供了驱动类名、URL、用户名和密码等相关配置。
请注意,这只是一个示例配置文件,并且其中的敏感信息已经做了模糊处理(如用户名和密码)。
接着。我们自定义一个注解。用于指定数据源
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@DS("zzb")
public @interface ZzbsqlDataSource {
}
@ZzbsqlDataSource是一个自定义注解,用于标记在类或方法上,并与@DS注解一起使用来指定数据源的名称。
以下是关于每个注解的作用的说明:
@Target({ ElementType.TYPE, ElementType.METHOD }):表示该注解可以用于类和方法上。
@Retention(RetentionPolicy.RUNTIME):表示该注解在运行时保留,并可通过反射机制读取。
@Documented:表示该注解将包含在Java文档中。
@DS(“zzb”):这是一个自定义注解@DS,它用于指定数据源的名称。在这里,数据源的名称被设置为"zzb"。
因此,当您将@ZzbsqlDataSource注解应用于类或方法时,它会告诉程序使用名为"zzb"的数据源。
请注意,@ZzbsqlDataSource注解本身并不提供任何额外的功能实现,它只是一个元数据注解,用于传递数据源信息给相应的处理器或切面。
最后。我们在对应的方法上添加自定义的注解即可。
@Service
public class IsdfServiceImpl implements IsdfService
{
@Autowired
private AhghMapper ahghMapper;
@Override
@ZzbsqlDataSource
public AseftById(String id)
{
return ahghMapper.selectAhghById(id);
}
}
完成!