SpingBoot 多数据源 数据库 场景 Mysql

今天遇到一个业务问题 一个项目需要根据需求。到多个数据库进行查询。下面就是一个简单案列:

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);
    }
}

完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Spring Boot配置多个数据时,可以按照以下步骤进行操作: 1. 配置数据连接信息: 在application.properties或application.yml文件中配置多个数据的连接信息,例如: ```properties # 数据1 spring.datasource.url=jdbc:mysql://localhost:3306/db1 spring.datasource.username=username1 spring.datasource.password=password1 # 数据2 spring.datasource.db2.url=jdbc:mysql://localhost:3306/db2 spring.datasource.db2.username=username2 spring.datasource.db2.password=password2 ``` 2. 创建数据配置类: 创建多个数据的配置类,分别继承`org.springframework.boot.autoconfigure.jdbc.DataSourceProperties`类,并使用`@Configuration`注解进行标注。例如,创建两个数据的配置类: ```java @Configuration public class DataSource1Config extends DataSourceProperties { // 可以添加额外的配置或覆盖默认配置 } @Configuration public class DataSource2Config extends DataSourceProperties { // 可以添加额外的配置或覆盖默认配置 } ``` 3. 创建数据实例: 在配置类中创建多个数据的实例,分别使用`@Bean`注解进行标注,并在方法中使用`@ConfigurationProperties`注解将对应的配置类注入。例如: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource1() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource dataSource2() { return DataSourceBuilder.create().build(); } } ``` 4. 切换数据: 可以使用AOP等方式,在需要切换数据的地方进行切换。例如,创建一个数据切换的切面类: ```java @Aspect @Component public class DataSourceSwitchAspect { @Around("@annotation(dataSourceSwitch)") public Object switchDataSource(ProceedingJoinPoint joinPoint, DataSourceSwitch dataSourceSwitch) throws Throwable { try { String dataSourceName = dataSourceSwitch.value(); // 根据dataSourceName切换数据 // ... return joinPoint.proceed(); } finally { // 切换回默认数据 // ... } } } ``` 5. 使用不同的数据: 在需要使用不同数据的地方,使用`@Qualifier`注解指定对应的数据实例。例如: ```java @Service public class UserService { @Autowired @Qualifier("dataSource1") private DataSource dataSource; // 使用dataSource进行数据库操作 } ``` 这就是Spring Boot多数据配置的基本步骤。根据具体需求和场景,可能还需要进行一些额外的配置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值