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

基于Spring boot輕松實(shí)現(xiàn)一個(gè)多數(shù)據(jù)源框架

數(shù)據(jù)庫(kù)
Spring Boot 提供了 Data JPA 的包,允許你使用類似 ORM 的接口連接到 RDMS。它很容易使用和實(shí)現(xiàn),只需要在 pom.xml 中添加一個(gè)條目(如果使用的是 Maven,Gradle 則是在 build.gradle 文件中)。

Spring Boot 提供了 Data JPA 的包,允許你使用類似 ORM 的接口連接到 RDMS。它很容易使用和實(shí)現(xiàn),只需要在 pom.xml 中添加一個(gè)條目(如果使用的是 Maven,Gradle 則是在 build.gradle 文件中)。

<dependencies>
        <!-- Spring boot 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency> 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
</dependencies>

在Main Spring Application類中添加 2 個(gè)注釋:

@SpringBootApplication
@EnableJpaRepositories
@EnableAutoConfiguration
public class SpringMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringMainApplication.class, args);
    }
}

最后添加一個(gè)數(shù)據(jù)庫(kù)連接包,配置數(shù)據(jù)庫(kù)連接即可實(shí)現(xiàn)與數(shù)據(jù)庫(kù)通信。

接下來(lái),我們開(kāi)始配置多數(shù)據(jù)源連接。

注意:多個(gè)數(shù)據(jù)庫(kù)應(yīng)該具有相同的驅(qū)動(dòng)程序。無(wú)法連接到不同的數(shù)據(jù)庫(kù),如 MySql 和 Postgres SQL 數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)必須相同。此外,數(shù)據(jù)庫(kù)模式必須相同,不同模式的 2 個(gè)數(shù)據(jù)庫(kù)無(wú)法進(jìn)行連接。

多數(shù)據(jù)源有哪些應(yīng)用場(chǎng)景?

1.支持具有相同模式的同一應(yīng)用程序內(nèi)的多租戶。

2.動(dòng)態(tài)模擬多個(gè)環(huán)境數(shù)據(jù)庫(kù)上的行為 ,而不需要重新啟動(dòng)應(yīng)用程序。 例如,你可以動(dòng)態(tài)連接到開(kāi)發(fā)數(shù)據(jù)庫(kù)或 QA 數(shù)據(jù)庫(kù),而無(wú)需重新啟動(dòng)應(yīng)用程序。

3.支持多個(gè)數(shù)據(jù)庫(kù)來(lái)模擬各種自動(dòng)化測(cè)試場(chǎng)景。不同數(shù)據(jù)庫(kù)可能具有不同的配置和靜態(tài)信息,意味著你可以用一個(gè)自動(dòng)化測(cè)試腳本覆蓋多個(gè)測(cè)試用例。

4.在同一個(gè)應(yīng)用程序中支持多個(gè)組織。根據(jù)用戶登錄,可以動(dòng)態(tài)決定他們的數(shù)據(jù)應(yīng)進(jìn)入哪個(gè)組織的數(shù)據(jù)庫(kù)。

5.一次性為多個(gè)數(shù)據(jù)庫(kù)插入數(shù)據(jù)。例如,你有一個(gè)從腳本創(chuàng)建數(shù)據(jù)的批處理作業(yè),你可以一次性連接到多個(gè)數(shù)據(jù)庫(kù),并對(duì)所有這些數(shù)據(jù)庫(kù)運(yùn)行腳本,而無(wú)需指向不同的應(yīng)用程序或重新啟動(dòng)服務(wù)器來(lái)執(zhí)行此操作。

多數(shù)據(jù)源示意圖如下:

第一步:添加 pom 依賴

<dependencies>
        <!-- Spring boot dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Swagger dependencies -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- lombok dependency -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>

        <!-- Database dependency -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>


        <!-- test dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>${project.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

第二步:添加數(shù)據(jù)庫(kù)連接配置

app.datasource.db1.jdbc-url=jdbc:postgresql://db1.com:5432/dbname1
app.datasource.db1.username=postgres
app.datasource.db1.password=password

app.datasource.db2.jdbc-url=jdbc:postgresql://db2.com:5432/dbname2
app.datasource.db2.username=postgres
app.datasource.db2.password=password

app.datasource.db3.jdbc-url=jdbc:postgresql://db3.com:5432/dbname3
app.datasource.db3.username=postgres
app.datasource.db3.password=password

這是 3 個(gè)獨(dú)立的 PostgresSQL 實(shí)例,具有相同的模式但具有不同的數(shù)據(jù)。

第三步:添加多數(shù)據(jù)庫(kù)配置。

首先,在 Spring 應(yīng)用程序主文件中添加注解:

@SpringBootApplication
@EnableJpaRepositories
@EnableAutoConfiguration
public class MultidatabaseApplication {

    public static void main(String[] args) {
        SpringApplication.run(MultidatabaseApplication.class, args);
    }
}

添加配置類:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "multiEntityManager",
        transactionManagerRef = "multiTransactionManager")
@EntityScan("com.sample.client.repositories.dto.entity")
public class DatabaseConfiguration {
    //添加 JPA 實(shí)體路徑
    private final String PACKAGE_SCAN = "com.sample.client.repositories.dto.entity";

    // 將db1設(shè)置為主數(shù)據(jù)庫(kù)
    @Primary
    @Bean(name = "db1DataSource")
    @ConfigurationProperties("app.datasource.db1")
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    //db2連接數(shù)據(jù)源注入
    @Bean(name = "db2DataSource")
    @ConfigurationProperties("app.datasource.db2")
    public DataSource db2DataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }
    //db3連接數(shù)據(jù)源注入
    @Bean(name = "db3DataSource")
    @ConfigurationProperties("app.datasource.db3")
    public DataSource db3DataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    //多數(shù)據(jù)源配置
    @Bean(name = "multiRoutingDataSource")
    public DataSource multiRoutingDataSource() {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(ClientNames.DB1, db1DataSource());
        targetDataSources.put(ClientNames.DB2, db2DataSource());
        targetDataSources.put(ClientNames.DB3, db3DataSource());
        MultiRoutingDataSource multiRoutingDataSource 
            = new MultiRoutingDataSource();
        multiRoutingDataSource.setDefaultTargetDataSource(db1DataSource());
        multiRoutingDataSource.setTargetDataSources(targetDataSources);
        return multiRoutingDataSource;
    }

    //多實(shí)體配置代碼
    @Bean(name = "multiEntityManager")
    public LocalContainerEntityManagerFactoryBean multiEntityManager() {
        LocalContainerEntityManagerFactoryBean em 
            = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(multiRoutingDataSource());
        em.setPackagesToScan(PACKAGE_SCAN);
        HibernateJpaVendorAdapter vendorAdapter 
            = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(hibernateProperties());
        return em;
    }

    @Bean(name = "multiTransactionManager")
    public PlatformTransactionManager multiTransactionManager() {
        JpaTransactionManager transactionManager
                = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(
                multiEntityManager().getObject());
        return transactionManager;
    }

    @Primary
    @Bean(name="entityManagerFactory")
    public LocalSessionFactoryBean dbSessionFactory() {
        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
        sessionFactoryBean.setDataSource(multiRoutingDataSource());
        sessionFactoryBean.setPackagesToScan(PACKAGE_SCAN);
        sessionFactoryBean.setHibernateProperties(hibernateProperties());
        return sessionFactoryBean;
    }

    //添加 hibernate 屬性
    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.show_sql", true);
        properties.put("hibernate.format_sql", true);
        properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        properties.put("hibernate.id.new_generator_mappings", false);
        properties.put("hibernate.jdbc.lob.non_contextual_creation", true);
        return properties;
    }
}

這樣就完成了我們的多數(shù)據(jù)庫(kù)配置。

com.sample.client.repositories.dto.entity — 此目錄包含 3 個(gè)數(shù)據(jù)庫(kù)通用的 JPA 實(shí)體。

MultiRoutingDataSource類是我們的實(shí)際實(shí)現(xiàn),允許我們連接到多個(gè)數(shù)據(jù)庫(kù)

接下來(lái),我們還需要一個(gè)DBContextHolder類來(lái)保存數(shù)據(jù)庫(kù)引用并在運(yùn)行時(shí)動(dòng)態(tài)更改數(shù)據(jù)庫(kù)。

public class DBContextHolder {
    private static final ThreadLocal<ClientNames> contextHolder = new ThreadLocal<>();
    public static void setCurrentDb(ClientNames dbType) {
        contextHolder.set(dbType);
    }
    public static ClientNames getCurrentDb() {
        return contextHolder.get();
    }
    public static void clear() {
        contextHolder.remove();
    }
}

ClientNames枚舉類如下:

public enum ClientNames {
    DB1, DB2, DB3
}

接下來(lái)我們需要對(duì)MultiRoutingDataSource進(jìn)行重寫(xiě)

public class MultiRoutingDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DBContextHolder.getCurrentDb();
    }
}

determineCurrentLookupKey 方法用于決定應(yīng)用程序應(yīng)該動(dòng)態(tài)連接到哪個(gè)數(shù)據(jù)庫(kù)。

好了,我們的配置就完成了。接下來(lái),我們測(cè)試下多數(shù)據(jù)源是否生效:

@RestController
@RequestMapping("/client")
public class ClientDataController {

    @Autowired
    private ClientMasterService clientMasterService;

    @GetMapping("/{clientdb}")
    public String findFromDatabase(@PathVariable String clientdbName) {
        return clientMasterService.getClientNames(clientdbName);
    }
}

ClientMasterService實(shí)現(xiàn)如下:

@Service
public class ClientMasterService {

    @Autowired
    private ClientMasterRepository clientMasterRepository;

    public String getClientNames(String client) {
        switch (client) {
            case "db1":
                DBContextHolder.setCurrentDb(ClientNames.DB1);
                break;
            case "db2":
                DBContextHolder.setCurrentDb(ClientNames.DB2);
                break;
            case "db3":
                DBContextHolder.setCurrentDb(ClientNames.DB3);
                break;
        }
        Entity1 e1 = clientMasterRepository.findByEntity1Name("John Doe");
        if(e1 != null) {
            return "found in database: " + client + " with id " + e1.getId();
        }
        return "found in " + client + " nada!";
    }
}

ClientMasterService使用DBContextHolder類根據(jù)從 Rest 端點(diǎn)傳入的數(shù)據(jù)庫(kù)名稱(db1、db2 或 db3)設(shè)置要指向的數(shù)據(jù)庫(kù)。

最后,編寫(xiě) JPA Repository 基礎(chǔ)代碼:

@Repository
public interface ClientMasterRepository extends JpaRepository<Entity1, String> {
    Entity1 findByEntity1Name(String name);
}

Entity1 類如下:

@Entity
@Table(name = "entity1")
@Getter
@Setter
public class Entity1 implements Serializable {
  @Id
  @Column(name = "id", nullable = false)
  private Integer id;
    
  @Column(name = "entity1Name")
  private String entity1Name; 
}

這樣就完成了整個(gè)多數(shù)據(jù)源的配置!!!

總結(jié)

如果你有多租戶需求,或者多環(huán)境測(cè)試需求等,可以自己嘗試編寫(xiě)一個(gè)多數(shù)據(jù)源框架,也可以引入第三方庫(kù)來(lái)解決此需求。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2020-12-31 07:55:33

spring bootMybatis數(shù)據(jù)庫(kù)

2022-05-18 12:04:19

Mybatis數(shù)據(jù)源Spring

2020-11-24 09:56:12

數(shù)據(jù)源讀寫(xiě)分離

2023-09-07 08:39:39

copy屬性數(shù)據(jù)源

2023-11-27 07:33:55

2022-06-02 10:38:42

微服務(wù)數(shù)據(jù)源分布式

2009-08-14 10:26:27

ibatis多數(shù)據(jù)源

2025-01-17 09:11:51

2021-03-10 19:01:02

SQL數(shù)據(jù)源

2024-10-30 10:22:17

2022-12-19 07:21:35

Hutool-db數(shù)據(jù)庫(kù)JDBC

2025-04-14 01:00:00

Calcite電商系統(tǒng)MySQL

2022-09-22 13:28:34

Redis分布式鎖

2022-09-29 08:28:57

SpringRedis分布式

2023-06-07 08:08:37

MybatisSpringBoot

2025-02-05 09:17:40

2023-01-04 09:33:31

SpringBootMybatis

2020-06-02 07:55:31

SpringBoot多數(shù)據(jù)源

2023-10-31 07:52:53

多數(shù)據(jù)源管理后端

2023-12-13 12:20:36

SpringMySQL數(shù)據(jù)源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩欧美国产综合在线| 成人资源av| 五月天精品在线| 亚洲系列在线观看| 这里只有精品在线| 精品国产一区二区三区久久久蜜月| 国产一线二线三线女| 精华区一区二区三区| 狠狠色综合播放一区二区| 国内自拍欧美激情| 一级黄色片网址| 国产精品一区二区三区美女| 在线观看91视频| 国产欧美久久久久| 亚洲在线免费观看视频| 欧美激情综合| 色妞久久福利网| 免费无码一区二区三区| 玖玖玖视频精品| 国产精品女人毛片| 精品福利影视| www.爱爱.com| 久久激情五月婷婷| 国产午夜精品全部视频在线播放 | 欧美乱熟臀69xxxxxx| 免费观看国产精品视频| 黄色在线视频网站| 国产日本欧洲亚洲| 极品尤物一区二区三区| 亚洲av永久纯肉无码精品动漫| 日本不卡在线视频| 欧美专区日韩视频| 国产精品99精品| 中文字幕亚洲精品乱码| 日韩在线不卡视频| 亚洲精品第三页| 日韩电影免费观| 精品久久久久久中文字幕| 91看片淫黄大片91| 在线日本视频| 亚洲国产成人一区二区三区| 久久青青草综合| 色欲久久久天天天综合网| 国产成人精品亚洲日本在线桃色| 成人h视频在线观看播放| 性高潮视频在线观看| 免费一级欧美片在线播放| 97高清免费视频| 久草精品视频在线观看| 国产综合精品| 国模gogo一区二区大胆私拍 | 日韩欧美精品在线观看| 国产av天堂无码一区二区三区| 午夜影院免费在线| 亚洲综合图片区| 成人小视频在线观看免费| 91麻豆免费在线视频| 亚洲美女在线一区| 日本精品福利视频| 欧美aaaxxxx做受视频| 一区二区三区免费看视频| 777久久精品一区二区三区无码 | 日韩综合一区| 尤物九九久久国产精品的特点 | 精品国产aⅴ| 欧美电影一区二区| 日韩欧美理论片| 日韩精品一区二区三区中文字幕| 日韩欧美电影在线| av天堂一区二区| 少妇高潮一区二区三区| 国产小视频91| 91插插插插插插| 亚洲午夜av| 欧洲一区二区视频| 中国黄色一级视频| 国产精品一区二区在线播放| 国产精品青青草| 黄色软件在线观看| 国产精品国产三级国产aⅴ中文| 中文字幕中文字幕99| 欧美家庭影院| 欧美日韩在线看| 男女无套免费视频网站动漫| 日韩国产91| 欧美精品一区二区三区蜜桃视频| 中文成人无字幕乱码精品区| 国产成人黄色| 九九热99久久久国产盗摄| 中文在线观看免费网站| 蜜桃av一区二区| 国产高清精品一区二区三区| 国产毛片av在线| 亚洲最新视频在线观看| 漂亮人妻被中出中文字幕| 日韩精品第二页| 亚洲国产精品久久久久| 久久久久久久毛片| 国内在线观看一区二区三区| 国产成人精品网站| 成人免费一级视频| 亚洲国产精品国自产拍av| 狠狠精品干练久久久无码中文字幕| 亚洲女色av| 亚洲精品成a人| 每日在线观看av| 欧美性生活一级| 亚洲九九九在线观看| 日韩在线观看视频一区二区| 美女黄色成人网| 成人av电影免费| 国产欧美一区二区三区视频在线观看| 成人夜色视频网站在线观看| 亚洲ai欧洲av| 女人让男人操自己视频在线观看| 欧美福利视频一区| 一级片手机在线观看| 午夜精品免费| 国产欧美一区二区三区久久人妖| 国产又爽又黄网站亚洲视频123| 成人免费视频播放| 综合网五月天| 成人免费毛片嘿嘿连载视频…| 亚洲国产欧美一区| 免费麻豆国产一区二区三区四区| 美日韩一级片在线观看| 欧美亚州在线观看| 黄色在线观看www| 欧美不卡123| 国产成人综合在线视频| 美女尤物国产一区| 日韩福利在线| 最新欧美电影| 在线播放一区二区三区| 精品无码国产污污污免费网站| 亚洲激情av| 国产精品国产精品国产专区蜜臀ah| 理论片午午伦夜理片在线播放| 在线观看不卡一区| 久久日免费视频| 蜜桃精品视频在线| 亚洲一区二区三区在线观看视频 | 欧美女激情福利| 91亚洲精品久久久| 国产传媒在线播放| 91麻豆精品国产91久久久使用方法| 久久久久亚洲av无码a片| 美女日韩在线中文字幕| 欧美久久久久久一卡四| 日日av拍夜夜添久久免费| 亚洲欧美国产高清va在线播| 日韩欧美在线观看免费| 久久网这里都是精品| 欧美黄色免费影院| 国语产色综合| 国产精品国内视频| 在线观看麻豆| 91精品国产乱码| 久久久久久久久久99| 成人手机在线视频| www.com毛片| 国产精品亚洲二区| 日韩美女免费线视频| 成人资源www网在线最新版| 欧美综合一区二区三区| 成人18视频免费69| 国产精品一区在线| 久久久久久久久久久视频| 亚洲精品一级二级三级| 国产精品久久久久久亚洲影视| 日本中文字幕在线2020| 亚洲超丰满肉感bbw| 欲求不满的岳中文字幕| 老司机午夜精品视频| 亚洲高清123| 国内在线视频| 日韩精品视频在线播放| 天天看天天摸天天操| 国产福利精品导航| 欧美一级在线看| 色135综合网| 风间由美一区二区三区| 欧洲亚洲两性| 久久综合伊人77777尤物| 神马午夜在线观看| 欧美日韩在线一区二区| 麻豆视频在线观看| 国产丝袜欧美中文另类| 永久免费看片在线观看| 国产亚洲一区在线| 国产精品h视频| 天天做夜夜做人人爱精品| 国产精品影片在线观看| 欧美hdxxxxx| 最新国产精品拍自在线播放| 亚洲美女综合网| 欧美性极品少妇| 国产精品theporn动漫| 国产蜜臀av在线一区二区三区| 18禁一区二区三区| 男人的天堂亚洲一区| 你真棒插曲来救救我在线观看| 日韩av专区| 久久精品magnetxturnbtih| 亚洲欧洲日韩精品在线| 亲爱的老师9免费观看全集电视剧| 麻豆传媒在线免费| 国产亚洲视频在线观看| 日韩中文字幕免费在线观看| 欧美午夜理伦三级在线观看| 久久免费在线观看视频| 国产精品日韩成人| 在线观看日韩精品视频| 精品动漫3d一区二区三区免费版| 欧美一区少妇| 狠狠一区二区三区| 亚洲专区在线视频| 久久xxx视频| 日韩美女视频在线观看| 韩国日本一区| 色综合色综合久久综合频道88| www.久久热.com| 亚洲人成亚洲人成在线观看| 欧美一级特黄aaaaaa大片在线观看| 欧美精品色一区二区三区| 男人天堂视频网| 午夜不卡av免费| 国产一级大片在线观看| 亚洲精品菠萝久久久久久久| 三级黄色录像视频| 欧美激情资源网| 日本二区在线观看| 国产亚洲女人久久久久毛片| 先锋资源av在线| 成人av电影免费在线播放| 日本一本二本在线观看| 亚洲精品九九| 成人性免费视频| 精品电影一区| 免费看国产曰批40分钟| 亚洲大片在线| 亚洲美免无码中文字幕在线| 一区二区高清| 91成人在线观看喷潮教学| 一区二区三区精品视频在线观看| 成年人午夜免费视频| 亚洲欧洲日本mm| 日韩精品 欧美| 国产日韩欧美一区| 两根大肉大捧一进一出好爽视频| 中国女人久久久| 99色精品视频| 日韩高清在线不卡| 亚洲污视频在线观看| 久久电影网站中文字幕| 在线不卡一区二区三区| 精品写真视频在线观看| 亚洲天堂网站在线| 国产91精品在线观看| 国产女主播在线播放| av一区二区三区黑人| 香蕉视频黄色在线观看| 国产亚洲欧美在线| 特黄一区二区三区| 亚洲免费在线视频| 日韩av免费网址| 色综合天天综合网天天狠天天| 波多野结衣 久久| 欧美日韩三级视频| 国产农村老头老太视频| 亚洲国产精品资源| 成年人在线观看网站| 美女久久久久久久久久久| 国产www.大片在线| 少妇高潮 亚洲精品| h网站久久久| 2018日韩中文字幕| 国产蜜臀av在线播放| 欧美一二三视频| 日本电影久久久| 国产欧美日本在线| 国产精品一区二区三区av麻| 成年人黄色在线观看| 最新成人av网站| 中文字幕中文在线| 成人免费视频一区二区| 免费观看a级片| 一个色在线综合| 波多野结衣不卡| 日韩欧美成人午夜| 粉嫩av在线播放| 欧美激情在线视频二区| 国产亚洲一区二区手机在线观看 | 国产高清一区二区| 男人添女人荫蒂免费视频| 日本v片在线高清不卡在线观看| 中文字幕第10页| 久久久久一区二区三区四区| 国产a级黄色片| 国产精品入口麻豆九色| 男人的天堂一区二区| 7878成人国产在线观看| 日本高清中文字幕二区在线| 精品视频9999| 欧美xxxx网站| 免费观看国产成人| 国产精品vip| 日本黄色福利视频| 久久综合色鬼综合色| 欧美日韩在线观看成人| 欧美在线免费播放| 天天操天天操天天干| 不卡av电影院| 成人在线免费电影网站| 久久超碰亚洲| 黄色亚洲免费| 免费观看黄网站| 国产精品久久久久久久久快鸭| 精品91久久久| 精品久久久久一区二区国产| 韩国中文字幕在线| 国产精品日本精品| 久久最新网址| 亚洲熟妇av日韩熟妇在线| 国产黄色精品网站| 国产一区二区精彩视频| 欧美视频一区二区| 国产在线观看高清视频| …久久精品99久久香蕉国产| 国产精品久久久久久久久久白浆| 无码毛片aaa在线| 欧美日韩免费观看一区=区三区| 亚洲综合色在线观看| 久久久精品综合| 天天综合天天干| 日韩av在线网站| 高端美女服务在线视频播放| 国产伦精品一区二区三区| 雨宫琴音一区二区在线| 最新版天堂资源在线| 亚洲自拍偷拍网站| 亚洲精品18p| 久久久久久久国产精品视频| 亚洲国产中文在线| 欧美 亚洲 视频| 床上的激情91.| 日本少妇裸体做爰| 亚洲国内精品在线| 天堂中文av在线资源库| 久久国产精品精品国产色婷婷| 一本色道久久综合一区 | 国产精品久久99| 国产精品日韩无码| 日韩亚洲欧美中文三级| av免费在线免费| 成人欧美一区二区三区在线观看 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人午夜精品| 亚洲国产午夜伦理片大全在线观看网站| 日本麻豆一区二区三区视频| 国产午夜精品久久久久久久久| 欧美日韩一区二区电影| 黄色网在线免费看| 春色成人在线视频| 国产一级一区二区| 国产不卡在线观看视频| 91麻豆精品国产91久久久久| 中文字幕中文字幕在线中高清免费版| 97中文在线观看| 国产视频欧美| eeuss中文字幕| 日韩欧美国产wwwww| 色综合桃花网| 亚洲欧美日韩精品在线| 国产成人亚洲综合a∨婷婷图片 | 国产精品毛片| 91视频免费在观看| 日韩视频中午一区| 午夜影院一区| 亚洲第一导航| 成人免费av资源| 波多野结衣不卡| 欧美极品在线视频| 精品国产精品| 亚洲美女高潮久久久| 色婷婷精品大在线视频| 二区三区四区高清视频在线观看| 国产精品一区二区三区不卡 | 午夜精品国产更新| eeuss影院在线观看| 成人永久免费| 美女一区二区视频| 香蕉免费毛片视频| 久久精品在线视频| 中文有码一区| 韩国三级丰满少妇高潮| 色欧美片视频在线观看| 香蕉久久一区二区三区| 国产中文欧美精品| 在线视频免费在线观看一区二区|