当前位置: 首页 > news >正文

为网站做一则广告语/网站排名英文

为网站做一则广告语,网站排名英文,天津网站建设怎么样,网络规划设计师 第2版 ed2k在原生java中就有spi来为我们接口作扩展通过配置文件去指定实现类来灵活编码,而不乏很多开源框架对java的spi 作了增强,比如dubbo。具体duboo的spi增强了什么大家可以去dubbo官网参考这里不作展开说明 来说说我们今天的目标: 需求&#xff…

在原生java中就有spi来为我们接口作扩展通过配置文件去指定实现类来灵活编码,而不乏很多开源框架对java的spi 作了增强,比如dubbo。具体duboo的spi增强了什么大家可以去dubbo官网参考这里不作展开说明

来说说我们今天的目标:

需求: 因为我们项目可能需要切换数据库,但是为了平滑切换,准备了这两个数据源Mapper,希望有什么问题可以通过配置文件马上回滚到原先的数据源。比如原先的mapper是查询的mysql,新的数据源是查询的postgresql。我们想先切换为postgresql去做改动验证,如果有问题可以马上通过配置文件切换为mysql。

传统的java spi可以通过配置文件制定接口的实现类,但是我们的接口实现类是Mybatis的Mapper,由Mybatis动态代理生成的。没法直接指定,但是我们可以基于SpringB的@ConditionalOnProperty来实现我们想要的效果

@ConditionalOnProperty

@ConditionalOnProperty的作用很明确,通过条件来判断Configuration是否生效

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {String[] value() default {}; //property名称的前缀String prefix() default "";//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用  String[] name() default {};//与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置  String havingValue() default "";//缺少该property时是否可以加载。如果为true,没有该property也会正常加载,反之则不会生效boolean matchIfMissing() default false;/  boolean relaxedNames() default true;
} 
}

看上面的解释有点懵,一般使用下面三个属性

  • prefix
  • name
  • havingValue

来通过一个具体例子看看吧

上面的需求说的很清楚,我们需要通过配置文件是加载Server的实现pg实现还是mysql实现。对于Service在Spring中如果有两个实现类是一个list,否则会报错,所以我们只能加载一个实现类

Server接口定义:

public interface OrderManager {int insert(@Param("orders") List<Order> orders);
}

两个不同的实现类

  • PGOrderManagerImpl
@Service
@Configuration
@ConditionalOnProperty(prefix = "order-detail", name = "impl", havingValue = "mysql")
public class PGOrderManagerImpl implements OrderManager{@AutowiredOrderMapper orderMapper;@Overridepublic int insert(List<Order> orders) {return orderMapper.insert(orders);}}
  • MySqlOrderManagerImpl
@Service
@Configuration
@ConditionalOnProperty(prefix = "order-detail", name = "impl", havingValue = "pg")
public class MySqlOrderManagerImpl implements OrderManager{@AutowiredMySqlOrderMapper mySqlOrderMapper;@Overridepublic int insert(List<Order> orders) {return orderMapper.insert(orders);}}

配置文件:

order-detail.impl = pg

这样我们只需要修改配置文件是pg 还是mysql就可以指定不同的接口实现类了,是不是很方便,需要注意的是可能idea在编码的时候会给你提示OrderManager 有两个实现类报错,不过不影响

关于我

觉得文章不错请扫码关注我吧

weichat

http://www.lbrq.cn/news/1378981.html

相关文章:

  • 唯品会网站建设 分析报告/推广图片制作
  • 电脑什么软件可以做动漫视频网站/seo推广费用
  • 阿里巴巴国际站运营/搜索引擎营销的方法不包括
  • zblog php转wordpress/来客seo
  • 塘厦做网站/seo技术服务外包公司
  • 小网站做几个关键词/做整站优化
  • 个人做跨境电商网站/汕头seo网站建设
  • 钓鱼网站制作教程视频/新闻摘抄
  • 网站建设信息科技公司/企业网络推广平台
  • 定制网站开发商业计划书/网站免费发布与推广
  • aspx网站服务器失去响应/微信加精准客源软件
  • 郑州 (网站建设/高端网站建设公司排行
  • 做地理题的网站/今日国际军事新闻
  • 做设备出口网站/搜索引擎优化要考虑哪些方面
  • 宁波哪里有做网站的/西安抖音seo
  • 网站技术解决/图们网络推广
  • 成都网站制作028net/营销渠道策划方案
  • 工作室 网站建设/如何在百度上做广告宣传
  • 怎么做素材网站/百度网盘24小时人工电话
  • 深圳装饰网站建设/近期10大新闻事件
  • 湛江市网站建设/新品推广活动方案
  • 沈阳紧急通知/优化绿松石什么意思
  • 网站建设及维护机/足球队世界排名榜
  • 哈尔滨快速建站服务热线/2345浏览器下载安装
  • 企业网站建设合同书标准版/教育培训机构有哪些
  • 做网站的网络公司有哪些/建立网站需要多少钱
  • wordpress前端上传头像/seo门户网站
  • 怎么做网站建设/seo零基础教学
  • 怎么用dw做动态网站/南京网站制作
  • 上海创新网站建设/站长统计代码
  • Kubernetes Gateway API 详解:现代流量路由管理方案
  • QT中使用OpenCV保姆级教程
  • Vue与Ajax快速入门
  • 【刷题】东方博宜oj 1412-快速幂(零基础,简单易懂)
  • 处理vscode在Ubuntu18.04上用不到的方法
  • 多云场景实战:华为手机 QR 码绑定与 AWS云服务器终端登录全解