• 合并分支导致的问题


            有一个模块,因底层使用的云平台不同,所以有两个分支分别对应h3c / openstack 云平台环境,但是这样导致难以维护,决定开发兼容两套云平台的sdk后(由其他同事进行完成,对于缺少的接口自行补充),使用该sdk将模块的两个分支进行合并。

            openstack分支有一个功能直接对openstack数据库进行了操作,而h3c分支并没有,如果模块切换到h3c环境后该mapperBean没有则会报错。于是使用@Conditional(x.class)注解进行有条件的使用。

    如果不是openstack环境则不注入 openstack环境的链接、会话对象,并手动注入一个空实现的mapper对象,这样其他类引入mappper对象就可以找到空实现的mapper对象,然后在其他类做判断如果不是openstack 则抛出异常提示非openstack环境该功能无法使用

    1. @Configuration
    2. @MapperScan(basePackages = "com.rs.remote.dao.nova",sqlSessionFactoryRef = "novaSqlSessionFactory")
    3. @ConditionalOnExpression("'${cloud.type}'.equals('os')")
    4. public class NovaDataSourceConfig {
    5. @ConfigurationProperties(prefix = "spring.datasource.druid.nova")
    6. @Bean(name = "novaDataSource")
    7. public DataSource getDataSource(){
    8. return DruidDataSourceBuilder.create().build();
    9. }
    10. @Bean(name = "novaSqlSessionFactory")
    11. public SqlSessionFactory novaSqlSessionFactory(@Qualifier("novaDataSource") DataSource dataSource) throws Exception {
    12. SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    13. bean.setDataSource(dataSource);
    14. bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/rs/remote/dao/nova/**/mybatis/*Mapper.xml"));
    15. bean.setTypeAliasesPackage("com.rs.remote.dao.nova.model");
    16. return bean.getObject();
    17. }
    18. }
    1. @Bean
    2. @ConditionalOnExpression("'!${cloud.type}'.equals('os')")
    3. public InstanceMapper instanceMapper(){
    4. return new InstanceMapper() {
    5. @Override
    6. public void updateHostNameForInstanceByCloudId(String cloudId, String hostName) {
    7. throw new RuntimeException("非openstack环境,无法使用");
    8. }
    9. };

  • 相关阅读:
    容器化nacos部署并实现服务发现(gradle)
    ICMP差错包
    【React】unmountComponentAtNode卸载组件
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wcsrtombs
    全球AI投资减少,生成式AI面临挑战;Command R + 成首个击败GPT-4的开源模型
    Java_题目_集合的遍历方式_字符串/数字/字符
    《Linux》day1--常见文件管理命令
    Python中的函数和模块
    推推:产品的规划和商业化分析
    AOP面向切面编程
  • 原文地址:https://blog.csdn.net/qq_41149775/article/details/127869522