ZBLOG

springboot+mybatisplus怎么根据driver-class-name来定义全局的数据源是oracle、mysql,并自动使用相应的驱动

在springboot+mybatisplus中,可以通过在application.yml文件中配置不同的数据源,并使用Spring的@Conditional注解来根据driver-class-name自动选择使用哪个数据源。

首先,在application.yml中定义两个数据源:

spring:
  datasource:
    # mysql 数据源配置
    mysql:
      url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false
      username: root
      password: root
      driver-class-name: com.mysql.jdbc.Driver

    # oracle 数据源配置
    oracle:
      url: jdbc:oracle:thin:@localhost:1521:orcl
      username: scott
      password: tiger
      driver-class-name: oracle.jdbc.driver.OracleDriver

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true

然后,在代码中使用@Conditional注解根据driver-class-name来选择使用哪个数据源。例如:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource.mysql")
    @Conditional(DriverClassNameCondition.class)
    public DataSource mysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.oracle")
    @Conditional(DriverClassNameCondition.class)
    public DataSource oracleDataSource() {
        return DataSourceBuilder.create().build();
    }
}

class DriverClassNameCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        String className = env.getProperty("spring.datasource.driver-class-name");
        return "com.mysql.jdbc.Driver".equals(className) || "oracle.jdbc.driver.OracleDriver".equals(className);
    }
}

在这个例子中,我们定义了两个数据源(mysql和oracle),并使用@Conditional注解根据driver-class-name来选择使用哪个数据源。具体来说,在DataSourceConfig类中,我们定义了两个名为mysqlDataSource和oracleDataSource的@Bean方法。这些方法使用@ConfigurationProperties注解来从application.yml文件中读取对应的数据源配置,并返回一个DataSource实例。

然后,在DriverClassNameCondition类中,我们根据driver-class-name属性的值来判断是否需要加载mysqlDataSource或者oracleDataSource。如果driver-class-name的值是com.mysql.jdbc.Driver,则加载mysqlDataSource;如果driver-class-name的值是oracle.jdbc.driver.OracleDriver,则加载oracleDataSource。

最后,我们可以在其他地方使用@Autowired注解来自动注入mysqlDataSource或者oracleDataSource。例如:

@Service
public class MyService {
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public MyService(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    // ...
}

在这个例子中,我们在MyService类的构造函数中注入了一个DataSource实例。Spring会根据我们在DataSourceConfig类中定义的@Bean方法自动选择mysqlDataSource或者oracleDataSource,并将它作为参数传递给构造函数。我们可以使用这个DataSource实例来执行数据库操作。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2027

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?