精品欧美一区二区三区在线观看 _久久久久国色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)

2018国产精品视频| 亚洲精品久久久久久久久久久久久 | 丰满女人性猛交| 亚洲男女视频在线观看| 视频精品一区二区| 色综合影院在线| av漫画在线观看| 日韩av超清在线观看| 亚洲免费观看在线视频| 久久久福利视频| 国产免费久久久| 视频在线在亚洲| 色综合久久88| 国产在线免费av| 久久久久久久久久久久久久久久久久久久| 欧洲一区二区三区在线| 日本阿v视频在线观看| 91福利在线视频| 国产91精品在线观看| 国产激情综合五月久久| 香蕉视频一区二区| 中文字幕亚洲精品乱码| 伊人久久久久久久久久久| 中出视频在线观看| 亚洲一区二区三区免费| 欧美日韩一区二区三区免费看 | 91麻豆免费视频网站| 免费看av成人| 日韩经典中文字幕| 午夜视频在线免费看| av在线播放一区| 色综合久久天天| 日本午夜激情视频| 暖暖在线中文免费日本| 亚洲色图都市小说| 日韩色妇久久av| 邻居大乳一区二区三区| 99精品视频中文字幕| 成人午夜电影在线播放| 国产视频一区二区三区四区五区| 日本亚洲一区二区| 国产成人啪精品视频免费网| 青青草免费观看视频| 国产亚洲毛片| 97视频在线观看免费| 久久99久久98精品免观看软件| 久久久久久久久久久9不雅视频| 影音先锋欧美精品| 日本欧美一区二区三区不卡视频| 亚洲人和日本人hd| 成人精品免费视频| 91精品在线观| 国产又爽又黄免费软件| 麻豆国产精品一区二区三区| 国产精品国产亚洲伊人久久| 亚洲国产成人精品女人久久| 日韩欧美午夜| 中文字幕免费精品一区| 蜜桃久久精品成人无码av| 国产精品三级| 在线播放日韩专区| av免费播放网站| 国产电影一区二区在线观看| 日韩日本欧美亚洲| 欧美黑人一级片| 精品电影一区| 欧美性资源免费| 亚洲男人天堂网址| 麻豆91在线观看| 99精品国产一区二区| 视频一区二区免费| 久久精品一区八戒影视| 伊人色综合久久天天五月婷| 新版中文在线官网| 午夜a成v人精品| 久久久精品三级| 亚洲精品一区二区在线播放∴| 91精品国产91综合久久蜜臀| 亚洲日本久久久| 久久av导航| 久久色精品视频| 日韩激情在线播放| 日本aⅴ免费视频一区二区三区| 成人日韩在线电影| 天堂在线观看av| 欧美激情综合在线| 国产成人生活片| 男人天堂视频在线观看| 欧美日韩一区二区在线观看视频 | 成人福利视频在线| 欧美日韩一区在线视频| 黄色网在线看| 色婷婷久久久综合中文字幕| 国产一伦一伦一伦| 国产精品流白浆在线观看| 亚洲图片欧洲图片av| 麻豆changesxxx国产| 美女网站久久| 成人免费看片网址| 经典三级在线| 亚洲国产精品自拍| 波多结衣在线观看| 国产 日韩 欧美 综合 一区| 色婷婷综合久久久久| 国产精品第56页| 久久99国产精品久久| 久热这里只精品99re8久| 国产乱色在线观看| 一本大道av伊人久久综合| 欧美体内she精高潮| 加勒比久久综合| 韩国日本不卡在线| jizz中国少妇| 中文字幕在线观看不卡视频| 日韩欧美视频网站| 试看120秒一区二区三区| 亚洲欧美在线看| 在线免费观看毛片| 久久电影网站中文字幕| 女人一区二区三区| a级片免费在线观看| 91精品国模一区二区三区| 婷婷六月天在线| 精品欧美午夜寂寞影院| 精品中文字幕视频| 国产精品污视频| 国产午夜精品理论片a级大结局| 丰满的少妇愉情hd高清果冻传媒| 96视频在线观看欧美| 在线播放亚洲激情| 国产一级片免费视频| eeuss国产一区二区三区| 一区二区日本伦理| 亚洲不卡系列| 日韩电影中文字幕| 免费麻豆国产一区二区三区四区| 激情综合网天天干| 天天成人综合网| 97色婷婷成人综合在线观看| 中文字幕精品av| 中文字幕理论片| 国产欧美一区二区精品性色| 男人操女人免费| 自拍欧美一区| 国产精品999999| www.亚洲.com| 欧美撒尿777hd撒尿| 日本二区在线观看| 日韩国产欧美在线播放| 午夜欧美一区二区三区免费观看| 国产v综合v| 中文字幕欧美亚洲| 一级黄色片视频| 亚洲桃色在线一区| 麻豆精品国产传媒| 黄页网站一区| 精品一区二区三区自拍图片区| 漫画在线观看av| 亚洲人成亚洲人成在线观看| 丰满熟女人妻一区二区三| 国产精品拍天天在线| 九一精品久久久| 欧美日韩国产高清| 国产一区二区无遮挡| 性国裸体高清亚洲| 亚洲日本欧美中文幕| 艳妇乳肉豪妇荡乳av无码福利| 中文一区二区在线观看| 亚洲天堂网2018| 韩国一区二区三区在线观看| 精品视频一区二区三区四区| 99爱在线观看| 亚洲欧美中文字幕| 亚洲中文字幕在线观看| 亚洲免费观看在线视频| 亚洲自拍偷拍精品| 天堂av在线一区| 永久免费精品视频网站| 999久久久精品一区二区| 日本国产欧美一区二区三区| 三区四区电影在线观看| 日韩精品一区二区三区在线观看 | 在线观看h网| 国产视频亚洲视频| 国产一区二区在线视频聊天| 一级精品视频在线观看宜春院 | 国产成人短视频在线观看| 91久久精品国产91性色| cao在线视频| 色悠悠国产精品| 性猛交xxxx| 884aa四虎影成人精品一区| 99热国产在线观看| 中文字幕一区二区三区av| 欧美一级片黄色| 美女视频免费一区| 久久国产亚洲精品无码| 天天久久综合| 欧美日韩国产综合视频在线| 日韩精品中文字幕吗一区二区| 欧美一级黑人aaaaaaa做受| 午夜毛片在线| 精品呦交小u女在线| 国产欧美一级片| 91黄色免费版| 日本免费观看视| 亚洲精品乱码久久久久久久久| 熟女少妇一区二区三区| 粉嫩嫩av羞羞动漫久久久| 在线看的黄色网址| 国产精品丝袜xxxxxxx| 亚洲精品国产suv一区88| 精品国产精品国产偷麻豆| 精品久久精品久久| 日韩精品视频中文字幕| 国产美女久久精品香蕉69| 中文一区一区三区高中清不卡免费| 久久久精品欧美| 亚洲成人三级| 国产一区二区三区在线视频 | 国产偷国产偷精品高清尤物| 精品影片一区二区入口| 国产一区二区网址| 色戒在线免费观看| 日韩主播视频在线| 亚洲熟妇av一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 国产一区二区三区小说| 午夜天堂精品久久久久| 亚洲欧美日韩精品久久久| 国产一区二区三区91| 久99久在线| 日韩精品亚洲aⅴ在线影院| 国产精品av一区| 成人性生交大片免费看中文视频| 91视频国产一区| gogo大尺度成人免费视频| 国产精品免费在线免费| 精品成人免费一区二区在线播放| 欧美性做爰毛片| 97se综合| 国产成人亚洲综合| 桃花岛tv亚洲品质| 国产成人综合一区二区三区| 成人黄色免费短视频| 国产成+人+综合+亚洲欧洲 | 亚洲国产一区二区三区a毛片| 日韩一级特黄毛片| 狠狠噜噜久久| 国产av麻豆mag剧集| 亚洲毛片一区| 女人喷潮完整视频| 三级成人在线视频| 成人性生交免费看| 狠狠色综合日日| 乳色吐息在线观看| 成人久久18免费网站麻豆 | 一区二区的视频| 欧美日本免费一区二区三区| 国产又粗又猛又黄又爽无遮挡| 777奇米四色成人影色区| 91在线公开视频| 日韩欧美美女一区二区三区| 风流老熟女一区二区三区| 亚洲国产精品99| 黄色av免费在线看| 日韩中文字幕在线观看| 日本理论片午伦夜理片在线观看| 久久久影视精品| 成人免费av电影| 成人激情视频在线观看| 亚洲欧美日本国产| 久久资源亚洲| 999久久久91| 精品无码国产一区二区三区av| 久久精品91| 在线观看免费av网址| gogogo免费视频观看亚洲一| 熟女高潮一区二区三区| 亚洲天堂成人网| 97免费在线观看视频| 欧美三级韩国三级日本三斤| 亚洲第九十九页| 国产一区二区三区日韩欧美| h片在线免费观看| 热久久这里只有| 玖玖玖视频精品| 蜜桃久久影院| 亚洲精品网址| 国产极品美女高潮无套久久久| 黑人精品欧美一区二区蜜桃 | 动漫av一区| 亚洲国产一区二区三区在线播| 亚洲婷婷在线| 久久99999| 不卡区在线中文字幕| 免费一级suv好看的国产网站| 亚洲国产精品一区二区www| 国产一级片免费在线观看| 日韩亚洲欧美一区| 国产小视频免费在线观看| 欧美第一黄色网| 日本精品网站| 美乳视频一区二区| 午夜激情一区| 亚洲美女性囗交| 国产偷v国产偷v亚洲高清| 亚洲一区二区91| 在线电影欧美成精品| 日韩精品一二| 久久久久久伊人| 亚洲午夜剧场| 天天综合狠狠精品| 噜噜噜91成人网| 最近中文字幕无免费| 亚洲美女少妇撒尿| 91中文字幕在线播放| 亚洲视频777| 色综合亚洲图丝熟| www.成人三级视频| 欧美在线免费| 亚洲高清视频免费| 中文字幕在线免费不卡| 中文字幕激情视频| 亚洲一区二区久久| 芒果视频成人app| 久久久综合亚洲91久久98| 激情视频一区二区三区| www.色.com| 亚洲婷婷综合久久一本伊一区| 中文字幕av片| 一区三区二区视频| av免费在线一区| 日本10禁啪啪无遮挡免费一区二区| 国产欧美69| 波多野结衣视频播放| 亚洲成人一区二区| 蜜桃久久一区二区三区| 欧美激情一区二区三区在线视频观看 | 日本美女一区二区三区视频| 久久av无码精品人妻系列试探| 精品magnet| 午夜视频福利在线| 欧美孕妇孕交黑巨大网站| 天堂99x99es久久精品免费| 日韩欧美视频网站| 久久综合九色综合久久久精品综合| 日韩精品国产一区二区| 日韩精品在线视频观看| 自拍偷拍欧美视频| 欧美日韩一区二区视频在线观看| 日韩精品91亚洲二区在线观看| 男人舔女人下部高潮全视频| 在线免费观看不卡av| 天堂地址在线www| 91久久国产精品| 欧美视频成人| 黄色正能量网站| 在线视频欧美精品| 日本成a人片在线观看| 亚洲一区二区在线| 亚洲承认在线| 成人午夜剧场视频网站| 欧美在线一区二区| 久操免费在线| 国产精品二区三区| 久久久蜜桃一区二区人| 99久久久无码国产精品不卡| 日韩亚洲欧美高清| 综合毛片免费视频| 亚洲国产激情一区二区三区| 国产在线麻豆精品观看| 日本在线观看视频网站| 亚洲人成亚洲人成在线观看| 国产精品一级在线观看| 国产精品又粗又长| 国产欧美日韩卡一| 精品二区在线观看| 欧洲永久精品大片ww免费漫画| 日本不卡二三区| 中文字幕一区二区三区人妻在线视频| 欧美日韩精品中文字幕| 97人人在线| 国产精品一区二区免费看| 玖玖精品视频| 久久综合久久鬼| 一本色道久久88综合亚洲精品ⅰ| 国产精品亚洲欧美一级在线 | 成人一区在线看| 久久久精品毛片| 欧美国产在线视频| 大色综合视频网站在线播放| 丰满岳乱妇一区二区| 欧美精品久久久久久久久老牛影院| 国产蜜臀在线| 中文字幕一区二区三区在线乱码 | 四虎影视成人精品国库在线观看| 精品国偷自产一区二区三区| 国产精品夫妻自拍| 神马久久精品|