精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot讀寫分離組件開發詳解

開發 前端
本篇詳細介紹關于SpringBoot讀寫分離組件開發的相關內容,一寫多讀,讀可以任意配置多個,默認都是從寫庫中進行操作,只有符合條件的方法(指定的目標方法或者標有指定注解的方法才會從讀庫中操作)。獨立打成一個jar包放入本地倉庫。

[[389704]]

環境:springboot2.2.6RELEASE

實現目標:一寫多讀,讀可以任意配置多個,默認都是從寫庫中進行操作,只有符合條件的方法(指定的目標方法或者標有指定注解的方法才會從讀庫中操作)。獨立打成一個jar包放入本地倉庫。

實現原理:通過aop。

1.pom.xml配置文件

  1. <dependency> 
  2.             <groupId>org.springframework.boot</groupId> 
  3.             <artifactId>spring-boot-starter</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.             <groupId>org.springframework.boot</groupId> 
  7.             <artifactId>spring-boot-starter-data-jpa</artifactId> 
  8. </dependency> 
  9. <dependency> 
  10.             <groupId>org.springframework.boot</groupId> 
  11.             <artifactId>spring-boot-configuration-processor</artifactId> 
  12.             <optional>true</optional> 
  13. </dependency> 

 2.application.yml配置文件

  1. pack: 
  2.   datasource: 
  3.     pointcut: execution(public * net.greatsoft.service.base.*.*(..)) || execution(public * net.greatsoft.service.xxx.*.*(..)) 
  4.     master: 
  5.       driverClassName: oracle.jdbc.driver.OracleDriver 
  6.       jdbcUrl: jdbc:oracle:thin:@10.100.102.113:1521/orcl 
  7.       username: test 
  8.       password: test 
  9.       minimumIdle: 10 
  10.       maximumPoolSize: 200 
  11.       autoCommit: true 
  12.       idleTimeout: 30000 
  13.       poolName: MbookHikariCP 
  14.       maxLifetime: 1800000 
  15.       connectionTimeout: 30000 
  16.       connectionTestQuery: SELECT 1 FROM DUAL   
  17.     slaves: 
  18.       - driverClassName: oracle.jdbc.driver.OracleDriver 
  19.         jdbcUrl: jdbc:oracle:thin:@10.100.102.113:1521/orcl 
  20.         username: dc 
  21.         password: dc 
  22.         minimumIdle: 10 
  23.         maximumPoolSize: 200 
  24.         autoCommit: true 
  25.         idleTimeout: 30000 
  26.         poolName: MbookHikariCP 
  27.         maxLifetime: 1800000 
  28.         connectionTimeout: 30000 
  29.         connectionTestQuery: SELECT 1 FROM DUAL 
  30.       - driverClassName: oracle.jdbc.driver.OracleDriver 
  31.         jdbcUrl: jdbc:oracle:thin:@10.100.102.113:1521/orcl 
  32.         username: empi 
  33.         password: empi 
  34.         minimumIdle: 10 
  35.         maximumPoolSize: 200 
  36.         autoCommit: true 
  37.         idleTimeout: 30000 
  38.         poolName: MbookHikariCP 
  39.         maxLifetime: 1800000 
  40.         connectionTimeout: 30000 
  41.         connectionTestQuery: SELECT 1 FROM DUAL 

 pointcut:定義切點,那些方法是需要攔截(從讀庫中操作)。

master:寫庫配置。

slaves:讀庫配置(List集合)。

3.屬性配置類

  1. @Component 
  2. @ConfigurationProperties(prefix = "pack.datasource"
  3. public class RWDataSourceProperties { 
  4.      
  5.     private String pointcut ; 
  6.     private HikariConfig master ; 
  7.     private List<HikariConfig> slaves = new ArrayList<>(); 
  8.      

 4.讀寫配置類

  1. public class RWConfig  { 
  2.      
  3.     private static Logger logger = LoggerFactory.getLogger(RWConfig.class) ; 
  4.  
  5.     @Bean 
  6.     public HikariDataSource masterDataSource(RWDataSourceProperties rwDataSourceProperties) { 
  7.         return new HikariDataSource(rwDataSourceProperties.getMaster()) ; 
  8.     } 
  9.      
  10.     @Bean 
  11.     public List<HikariDataSource> slaveDataSources(RWDataSourceProperties rwDataSourceProperties) { 
  12.         List<HikariDataSource> lists = new ArrayList<>() ; 
  13.         for(HikariConfig config : rwDataSourceProperties.getSlaves()) { 
  14.             lists.add(new HikariDataSource(config)) ; 
  15.         } 
  16.         return lists ; 
  17.     } 
  18.      
  19.     @Bean 
  20.   @Primary 
  21.     @DependsOn({"masterDataSource""slaveDataSources"}) 
  22.     public AbstractRoutingDataSource routingDataSource(@Qualifier("masterDataSource")DataSource masterDataSource, 
  23.             @Qualifier("slaveDataSources")List<HikariDataSource> slaveDataSources) { 
  24.         BaseRoutingDataSource ds = new BaseRoutingDataSource() ; 
  25.         Map<Object, Object> targetDataSources = new HashMap<>(2) ; 
  26.         targetDataSources.put("master", masterDataSource) ; 
  27.         for (int i = 0; i < slaveDataSources.size(); i++) { 
  28.             targetDataSources.put("slave-" + i, slaveDataSources.get(i)) ; 
  29.         } 
  30.         ds.setDefaultTargetDataSource(masterDataSource) ; 
  31.         ds.setTargetDataSources(targetDataSources) ; 
  32.         return ds ; 
  33.     } 
  34.      

 5.數據源路由

  1. public class BaseRoutingDataSource extends AbstractRoutingDataSource { 
  2.  
  3.     @Resource 
  4.     private DataSourceHolder holder; 
  5.      
  6.     @Override 
  7.     protected Object determineCurrentLookupKey() { 
  8.         return holder.get() ; 
  9.     } 
  10.      

  1. public class DataSourceHolder { 
  2.      
  3.     private ThreadLocal<Integer> context = new ThreadLocal<Integer>() { 
  4.         @Override 
  5.         protected Integer initialValue() { 
  6.             return 0 ; 
  7.         } 
  8.     }; 
  9.      
  10.     @Resource 
  11.     private BaseSlaveLoad slaveLoad ; 
  12.      
  13.     public String get() { 
  14.         Integer type = context.get() ; 
  15.         return type == null || type == 0 ? "master" : "slave-" + slaveLoad.load() ; 
  16.     } 
  17.      
  18.     public void set(Integer type) { 
  19.         context.set(type) ; 
  20.     } 
  21.      

 通過aop動態設置context的內容值,0為從寫庫中操作,其它的都在讀庫中操作。

BaseSlaveLoad類為到底從那個讀庫中選取的一個算法類,默認實現使用的是輪詢算法。

  1. public interface BaseSlaveLoad { 
  2.  
  3.     int load() ; 
  4.      

  1. public abstract class AbstractSlaveLoad implements BaseSlaveLoad { 
  2.  
  3.     @Resource 
  4.     protected List<HikariDataSource> slaveDataSources ; 
  5.      

 這里定義一個抽象類注入了讀庫列表,所有的實現類從該類中繼承即可。

  1. public class PollingLoad extends AbstractSlaveLoad { 
  2.      
  3.     private int index = 0 ; 
  4.     private int size = 1 ; 
  5.      
  6.     @PostConstruct 
  7.     public void init() { 
  8.         size = slaveDataSources.size() ; 
  9.     } 
  10.      
  11.     @Override 
  12.     public int load() { 
  13.         int n = index ; 
  14.         synchronized (this) { 
  15.             index = (++index) % size ; 
  16.         } 
  17.         return n ; 
  18.     } 
  19.      

 配置成Bean

  1. @Bean 
  2.     @ConditionalOnMissingBean 
  3.     public BaseSlaveLoad slaveLoad() { 
  4.         return new PollingLoad() ; 
  5.     } 
  6.      
  7.     @Bean 
  8.     public DataSourceHolder dataSourceHolder() { 
  9.         return new DataSourceHolder() ; 
  10.     } 

 6.數據源AOP

  1. public class DataSourceAspect implements MethodInterceptor { 
  2.  
  3.     private DataSourceHolder holder ; 
  4.      
  5.     public DataSourceAspect(DataSourceHolder holder) { 
  6.         this.holder = holder ; 
  7.     } 
  8.      
  9.     @Override 
  10.     public Object invoke(MethodInvocation invocation) throws Throwable { 
  11.         Method method = invocation.getMethod() ; 
  12.         String methodName = method.getName() ; 
  13.         SlaveDB slaveDB = method.getAnnotation(SlaveDB.class) ; 
  14.         if (slaveDB == null) { 
  15.             slaveDB = method.getDeclaringClass().getAnnotation(SlaveDB.class) ; 
  16.         } 
  17.         if (methodName.startsWith("find")  
  18.                 || methodName.startsWith("get"
  19.                 || methodName.startsWith("query"
  20.                 || methodName.startsWith("select"
  21.                 || methodName.startsWith("list"
  22.                 || slaveDB != null) { 
  23.             holder.set(1) ; 
  24.         } else { 
  25.             holder.set(0) ; 
  26.         } 
  27.         return invocation.proceed(); 
  28.     } 
  29.  

 應該切點需要動態配置,所以這里采用spring aop的方式來配置

  1. @Bean 
  2.     public AspectJExpressionPointcutAdvisor logAdvisor(RWDataSourceProperties props, DataSourceHolder holder) { 
  3.         AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor() ; 
  4.         logger.info("執行表達式:{}", props.getPointcut()) ; 
  5.         advisor.setExpression(props.getPointcut()) ; 
  6.         advisor.setAdvice(new DataSourceAspect(holder)) ; 
  7.         return advisor ; 
  8.     } 

 7.Enable開啟功能

  1. public class RWImportSelector implements ImportSelector { 
  2.  
  3.     @Override 
  4.     public String[] selectImports(AnnotationMetadata importingClassMetadata) { 
  5.         return new String[] {RWConfig.class.getName()} ; 
  6.     } 
  7.  

 這里的RWConfig為我們上面的配置類

  1. @Retention(RetentionPolicy.RUNTIME) 
  2. @Target(ElementType.TYPE) 
  3. @Documented 
  4. @Import({RWImportSelector.class}) 
  5. public @interface EnableRW { 

  1. @Documented 
  2. @Retention(RUNTIME) 
  3. @Target({ TYPE, METHOD }) 
  4. public @interface SlaveDB { 

 有@SlaveDB的注解方法會類都會從讀庫中操作。

到此讀寫分離組件開發完成。

8.打包安裝到本地倉庫

  1. mvn install -Dmaven.test.skip=true 

9.新建base-web項目

引入依賴

  1. <dependency> 
  2.             <groupId>com.pack</groupId> 
  3.             <artifactId>xg-component-rw</artifactId> 
  4.             <version>1.0.0</version> 
  5. </dependency> 

 啟動類添加注解開啟讀寫分離功能

  1. @SpringBootApplication 
  2. @EnableRW 
  3. public class BaseWebApplication { 
  4.  
  5.     public static void main(String[] args) { 
  6.         SpringApplication.run(BaseWebApplication.class, args); 
  7.     } 
  8.  

 測試:

第一次查詢:

第二次查詢:

為了區別兩個從庫設置不同的數據

這里是寫庫

完畢!!!

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-07-07 08:36:45

配置注解jar

2020-04-23 15:08:41

SpringBootMyCatJava

2021-06-25 10:05:58

SpringBootMySQL數據庫

2024-05-31 13:34:57

2011-08-30 12:49:59

Mysql ProxyLua分離

2011-08-22 12:01:38

iPhone開發文件

2019-09-30 09:19:54

Redis分離云數據庫

2018-10-16 16:45:05

數據庫讀寫分離

2009-04-10 09:06:16

Windows Emb

2011-08-10 16:27:07

Cocoa TouchPlist

2022-04-25 08:03:57

MySQL中間件MyCat

2017-05-25 10:22:13

NoSQL數據庫主主備份

2009-05-04 09:13:52

PHPMySQL讀寫分離

2018-01-01 05:23:13

服務化讀寫分離架構

2010-05-17 11:19:44

MySQL proxy

2017-09-04 09:53:58

MySQLAtlasNavicat

2009-09-16 13:05:32

C#組件開發

2025-07-30 03:22:00

2023-02-01 07:34:41

讀寫分離數據庫

2022-06-20 14:59:14

讀寫分離模Loki
點贊
收藏

51CTO技術棧公眾號

日本不卡二区| 久久91超碰青草是什么| xxxx一级片| 国产精品剧情| 不卡欧美aaaaa| 国产精品久久久久999| 欧美成人精品欧美一级| 日韩美女毛片| 欧美一区中文字幕| 国产精品秘入口18禁麻豆免会员| av在线中文| 成人黄色一级视频| 国产精品视频99| 精品久久免费视频| 91亚洲一区| 日韩精品在线播放| 久久精品无码一区二区三区毛片| 国产社区精品视频| 一区二区三区欧美在线观看| 欧美日韩在线精品| 亚洲欧美激情国产综合久久久| 美女精品在线观看| 久久久免费观看| 国产精品国产三级国产传播| 亚洲另类av| 欧美xxxx老人做受| 五月天婷婷影视| 日韩三区免费| 色综合久久综合网欧美综合网| 黄瓜视频免费观看在线观看www | 成人在线视频免费| 黑人巨大精品欧美一区二区一视频| 在线精品亚洲一区二区| 狠狠色伊人亚洲综合网站l| 成人精品一区二区三区四区| 成人黄色免费网站在线观看| 亚洲成人av影片| 一区二区三区高清视频在线观看| 久久夜色撩人精品| 麻豆视频免费在线播放| theporn国产精品| av毛片在线播放| 国产精品人妖ts系列视频| 欧美韩国日本精品一区二区三区| 欧美一区,二区| 成人午夜电影久久影院| av一本久道久久波多野结衣| jlzzjlzzjlzz亚洲人| 久久精品二区亚洲w码| 国产精品入口免费视| 波多野结衣大片| 男人操女人的视频在线观看欧美 | 国产一级特黄视频| 欧美精品入口| 欧美第一黄色网| 久久国产精品波多野结衣av | 亚洲国产精品成人天堂| 日本三级韩国三级欧美三级| 亚洲愉拍自拍另类高清精品| 日本成人在线不卡| 男男gaygays亚洲| 亚洲国产欧美另类丝袜| 精品国产一区三区| 都市激情亚洲一区| 欧美午夜精品一区二区三区| 美女在线视频一区二区| 国产精品白丝久久av网站| 91精品国产91久久久久久一区二区 | 日韩激情av| 亚洲午夜一区二区三区| 欧美日韩成人免费视频| 日韩福利一区| 欧美日韩你懂的| 性久久久久久久久久久久久久| 国产亚洲高清一区| 亚洲成人网在线| 国产在线观看91精品一区| 日韩欧美国产片| 欧美xxxx做受欧美护士| 欧美美女喷水视频| av免费观看不卡| 国产一区二区三区四区| 播播国产欧美激情| 国产无码精品在线播放| 久久综合伊人| 91久久精品久久国产性色也91| 国产成人毛毛毛片| 91亚洲精品乱码久久久久久蜜桃| 日韩aⅴ视频一区二区三区| 免费a级毛片在线播放| 亚洲线精品一区二区三区| jizzjizzxxxx| 国产精品3区| 国产视频精品在线| 无码黑人精品一区二区| 亚洲伦理精品| 国产精品美女网站| 国产91免费在线观看| 久久精品综合网| 免费看日b视频| 电影天堂国产精品| 亚洲精品一区二区三区在线观看| www.自拍偷拍| 欧美不卡一区| 国产精品福利久久久| 亚洲国产成人在线观看| 中文字幕不卡的av| 男人添女荫道口图片| 欧美亚洲二区| 精品网站999www| 老女人性淫交视频| 日本大胆欧美人术艺术动态| 国产一区二区高清不卡 | 久久久久久影视| 日韩a级黄色片| 国产精品videossex撒尿| 亚洲成色777777女色窝| 一本一本久久a久久| 国产免费福利视频| 成人亚洲一区二区一| 宅男噜噜99国产精品观看免费| 国产传媒在线| 欧美一区二区三区视频在线| 51妺嘿嘿午夜福利| 国产精品乱看| 国产日韩在线一区二区三区| www在线视频| 欧美群妇大交群中文字幕| 黄色性生活一级片| 黄页网站一区| 91pron在线| 免费在线观看av片| 欧美日韩一级二级| 日韩中文字幕有码| 老司机亚洲精品| 久久波多野结衣| 成人免费网站观看| 精品国产麻豆免费人成网站| 欧美激情一区二区视频| 国产一区二区在线影院| 五月天男人天堂| 国产人与zoxxxx另类91| 搡老女人一区二区三区视频tv| 国产无遮挡又黄又爽又色视频| 91女厕偷拍女厕偷拍高清| 久久成人免费观看| 女人抽搐喷水高潮国产精品| 国内精品久久久久伊人av| 黑人精品一区二区三区| 午夜精品福利久久久| 91精品久久久久久蜜桃| 黄色免费在线看| 欧美三级欧美一级| 色偷偷男人天堂| 日本美女一区二区三区| 精品成人在线视频| 久久成人免费观看| 亚洲成a人片77777在线播放 | 久久久久资源| 日韩av影片| 亚洲精品一区久久久久久| 精品人妻一区二区色欲产成人| 91视视频在线观看入口直接观看www | 尤物网站在线观看| 国产精品乱看| 奇米视频888战线精品播放| 日韩精选视频| 久久精品视频99| 欧美 日韩 人妻 高清 中文| 日日夜夜精品| 亚洲国产欧美一区二区三区同亚洲| 久久亚洲精品大全| 91蜜桃免费观看视频| 亚欧在线免费观看| 亚洲国产不卡| 黄色国产精品一区二区三区| 韩国主播福利视频一区二区三区| 一区二区三区动漫| 国内精品久久久久久久久久久| 亚洲一区二区在线播放相泽| 亚洲一区二区三区综合| 日一区二区三区| 裸体大乳女做爰69| 欧美wwwwww| 成人av在线网址| 国产后进白嫩翘臀在线观看视频 | 小毛片在线观看| 日韩专区欧美专区| 肉大捧一出免费观看网站在线播放 | 国产精品麻豆免费版现看视频| 久久99最新地址| 国产青青在线视频| 欧美激情理论| 国产丝袜不卡| 亚洲伦理久久| 91av在线网站| www.久久ai| 亚洲欧美日韩高清| 国产aⅴ一区二区三区| 色综合网色综合| 少妇人妻丰满做爰xxx| 九七久久人人| 亚洲午夜精品在线| 妺妺窝人体色WWW精品| 国产宾馆实践打屁股91| 国产亚洲天堂网| 欧美激情1区| 亚洲国产成人不卡| 欧美一区二区三区红桃小说| 91精品视频免费| 久久人体大尺度| 久久久天堂国产精品女人| 日本在线视频观看| 亚洲免费视频观看| 欧美一区二区三区激情| 正在播放亚洲一区| 无码人妻丰满熟妇区bbbbxxxx| 亚洲欧美日韩中文字幕一区二区三区| 日本高清www| 福利一区福利二区| 久久精品国产99久久99久久久| 久久亚洲电影| 国产精品网站免费| 国产精品jizz在线观看美国| 亚洲国产精品一区在线观看不卡| 日本一道高清一区二区三区| 99re视频| 日韩一区二区三区精品| 亚洲xxxxx性| 欧美成人三级| 国产精品午夜一区二区欲梦| 免费看av不卡| 欧洲成人免费aa| 操人在线观看| 97视频色精品| 欧美aa免费在线| 2025国产精品视频| caoprom在线| 97视频在线观看成人| www.综合网.com| 欧美国产精品va在线观看| 国产午夜精品久久久久免费视| 一区二区三区视频在线| melody高清在线观看| 亚洲性无码av在线| 成年人在线视频免费观看| 亚洲色图偷窥自拍| 国产黄在线看| 在线观看亚洲区| 在线免费av网站| 日韩中文在线不卡| 黄色精品免费看| 久操成人在线视频| 成年网站在线视频网站| 久久久久久一区二区三区 | 国产一级在线| 亚洲人成网站免费播放| 国家队第一季免费高清在线观看| 亚洲欧美日韩综合| 中文日本在线观看| 欧美噜噜久久久xxx| 精品精品导航| 欧美一级淫片aaaaaaa视频| 超碰超碰人人人人精品| 国产成人亚洲精品| 成人1区2区| 91亚色免费| 欧美sss在线视频| 色婷婷精品国产一区二区三区| 一区二区小说| 在线观看亚洲视频啊啊啊啊| 91精品啪在线观看国产81旧版| 9l视频自拍9l视频自拍| 伊人蜜桃色噜噜激情综合| 亚洲国产精品久久久久婷蜜芽| 石原莉奈在线亚洲二区| 中文字幕国产高清| 成人教育av在线| 亚洲精品午夜视频| 亚洲男人的天堂av| 成人午夜视频精品一区| 欧美手机在线视频| www国产在线| 亚洲人成电影网| 成人免费网址| 97在线免费观看| 日韩电影免费观看高清完整版在线观看| 91精品免费视频| 秋霞在线一区| 欧美日韩午夜爽爽| 日韩精品一级中文字幕精品视频免费观看| 日韩av.com| 97精品电影院| 精品国产视频在线观看| 狠狠色狠狠色综合日日小说| 国产又粗又长又黄| 日韩精品免费在线播放| 成年人黄视频在线观看| 日本精品va在线观看| 日韩精品一区二区三区中文| 欧美一级爱爱| 激情久久久久久久| 污污动漫在线观看| 91网站在线观看视频| 69av视频在线| 欧美亚日韩国产aⅴ精品中极品| 午夜精品无码一区二区三区| 亚洲一区二区黄| 蜜桃视频在线观看播放| 91久久精品在线| 不卡一区综合视频| 欧美三级一级片| 丝袜在线观看| 欧美大片第1页| 亚洲精品三区| 日韩精品最新在线观看| 亚洲国产高清视频| 午夜激情视频网| 国产精品情趣视频| 无码人妻精品一区二区三区9厂 | 亚洲成a人v欧美综合天堂下载| 亚洲自拍偷拍另类| 国产一区二区三区在线视频| 精品极品在线| 高清一区二区三区视频| 91精品综合| 污污网站在线观看视频| 国产拍揄自揄精品视频麻豆| 激情五月色婷婷| 精品日韩99亚洲| 亚洲综合影视| 亚洲精品免费av| 午夜激情久久| av在线网址导航| 国产精品久久久久三级| 探花国产精品一区二区| 国产亚洲精品一区二555| 日韩精品极品| 精品一区日韩成人| 亚洲一区二区三区高清| 中文字幕一区二区久久人妻网站| 亚洲图片自拍偷拍| 人人妻人人玩人人澡人人爽| 欧美大片大片在线播放| 99香蕉久久| 99热亚洲精品| 99精品视频一区| 欧美激情黑白配| 国产亚洲视频在线| 成人精品一区二区三区电影| 午夜视频久久久| 韩国成人在线视频| 日本天堂中文字幕| 精品国产91久久久久久久妲己| 国产高清在线a视频大全 | 久久精品国产www456c0m| 久久婷五月综合| 亚洲欧美日韩在线不卡| 性生活三级视频| 91国内免费在线视频| 在线一级成人| 亚洲欧洲日本精品| 亚洲免费观看高清| 全国男人的天堂网| 国产97在线播放| 久久亚洲成人| 九九热视频免费| 亚洲高清视频在线| 黄色毛片在线看| 成人免费看吃奶视频网站| 欧美搞黄网站| 中文字幕影片免费在线观看| 色婷婷精品大在线视频 | av观看免费在线| 国产欧美视频一区二区| 国产又粗又黄视频| 久久久久在线观看| 国产99久久| 不卡中文字幕在线观看| 婷婷丁香激情综合| www亚洲人| 国产91aaa| 日本va欧美va欧美va精品| 麻豆疯狂做受xxxx高潮视频| 亚洲美女激情视频| 精品国产鲁一鲁****| 青青青免费在线| 成人欧美一区二区三区小说| 丁香花免费高清完整在线播放 | 好看的av在线| 日韩视频免费在线观看| 国产精品高潮呻吟久久久久| 四季av一区二区| 午夜a成v人精品| 黄色在线观看网站| 麻豆精品传媒视频| 国产成人av一区二区三区在线| 亚洲国产成人无码av在线| 欧美成人h版在线观看| 精品国产一区一区二区三亚瑟|