ZBLOG

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

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

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

  1. spring:
  2. datasource:
  3. # mysql 数据源配置
  4. mysql:
  5. url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false
  6. username: root
  7. password: root
  8. driver-class-name: com.mysql.jdbc.Driver
  9. # oracle 数据源配置
  10. oracle:
  11. url: jdbc:oracle:thin:@localhost:1521:orcl
  12. username: scott
  13. password: tiger
  14. driver-class-name: oracle.jdbc.driver.OracleDriver
  15. mybatis-plus:
  16. configuration:
  17. map-underscore-to-camel-case: true

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

  1. @Configuration
  2. public class DataSourceConfig {
  3. @Bean
  4. @ConfigurationProperties("spring.datasource.mysql")
  5. @Conditional(DriverClassNameCondition.class)
  6. public DataSource mysqlDataSource() {
  7. return DataSourceBuilder.create().build();
  8. }
  9. @Bean
  10. @ConfigurationProperties("spring.datasource.oracle")
  11. @Conditional(DriverClassNameCondition.class)
  12. public DataSource oracleDataSource() {
  13. return DataSourceBuilder.create().build();
  14. }
  15. }
  16. class DriverClassNameCondition implements Condition {
  17. @Override
  18. public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
  19. Environment env = context.getEnvironment();
  20. String className = env.getProperty("spring.datasource.driver-class-name");
  21. return "com.mysql.jdbc.Driver".equals(className) || "oracle.jdbc.driver.OracleDriver".equals(className);
  22. }
  23. }

在这个例子中,我们定义了两个数据源(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。例如:

  1. @Service
  2. public class MyService {
  3. private final JdbcTemplate jdbcTemplate;
  4. @Autowired
  5. public MyService(DataSource dataSource) {
  6. jdbcTemplate = new JdbcTemplate(dataSource);
  7. }
  8. // ...
  9. }

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?