久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

全面解讀Spring Boot 中的Profile配置體系

瀏覽:6日期:2023-07-13 17:02:26
目錄PreSpring Boot 中的配置體系配置文件與 Profile主 application.properties 中指定激活的ProfileProfile 配置信息只保存在一個文件java ?jar 激活Profile代碼控制與Profile常見配置場景和內(nèi)容如何在應(yīng)用程序中嵌入系統(tǒng)配置信息如何創(chuàng)建和使用自定義配置信息使用 @Value 注解使用 @ConfigurationProperties 注解為自定義配置項添加提示功能如何組織和整合配置信息使用 @PropertySources 注解spring.config.location 來改變配置文件的默認(rèn)加載位置理解配置文件的加載順序如何覆寫內(nèi)置的配置類

全面解讀Spring Boot 中的Profile配置體系

Pre

配置體系是基于 Spring Boot 框架開發(fā)應(yīng)用程序的基礎(chǔ),而自動配置也是該框架的核心功能之一,梳理使用 Spring Boot 配置體系的系統(tǒng)方法.

接下來,我們?yōu)檫@個代碼工程添加一些支持 RESTful 風(fēng)格的 HTTP 端點,在這里我們同樣創(chuàng)建一個 CustomerController 類,如下所示

@RestController@RequestMapping(value='customers')public class CustomerController { @RequestMapping(value = '/{id}', method = RequestMethod.GET) public CustomerTicket getCustomerTicketById(@PathVariable Long id) {CustomerTicket customerTicket = new CustomerTicket();customerTicket.setId(1L);customerTicket.setAccountId(100L);customerTicket.setOrderNumber('Order00001');customerTicket.setDescription('DemoOrder');customerTicket.setCreateTime(new Date());return customerTicket; }}

請注意,這里是為了演示方便,我們才使用了硬編碼完成了一個 HTTP GET 請求的響應(yīng)處理。

現(xiàn)在 RESTful 端點已經(jīng)開發(fā)完成,我們需要對這個應(yīng)用程序進行打包。基于 Spring Boot 和 Maven,當(dāng)我們使用 mvn package 命令構(gòu)建整個應(yīng)用程序時,將得到一個 customerservice-0.0.1-SNAPSHOT.jar 文件,而這個 jar 文件就是可以直接運行的可執(zhí)行文件,內(nèi)置了 Tomcat Web 服務(wù)器。也就是說,我們可以通過如下命令直接運行這個 Spring Boot 應(yīng)用程序:

java ?jar customerservice-0.0.1-SNAPSHOT.jar

通過 Postman 訪問“http://localhost:8083/customers/1”端點,可以得到如下圖所示的HTTP響應(yīng)結(jié)果,說明整個服務(wù)已經(jīng)啟動成功。

全面解讀Spring Boot 中的Profile配置體系

Spring Boot 中的配置體系

在 Spring Boot 中,其核心設(shè)計理念是對配置信息的管理采用約定優(yōu)于配置。在這一理念下,則意味著開發(fā)人員所需要設(shè)置的配置信息數(shù)量比使用傳統(tǒng) Spring 框架時還大大減少。

當(dāng)然,今天我們關(guān)注的主要是如何理解并使用 Spring Boot 中的配置信息組織方式,這里就需要引出一個核心的概念,即 Profile。

配置文件與 Profile

Profile 本質(zhì)上代表一種用于組織配置信息的維度,在不同場景下可以代表不同的含義。例如,如果 Profile 代表的是一種狀態(tài),我們可以使用 open、halfopen、close 等值來分別代表全開、半開和關(guān)閉等。再比如系統(tǒng)需要設(shè)置一系列的模板,每個模板中保存著一系列配置項,那么也可以針對這些模板分別創(chuàng)建 Profile。這里的狀態(tài)或模版的定義完全由開發(fā)人員自主設(shè)計,我們可以根據(jù)需要自定義各種 Profile,這就是 Profile 的基本含義。

為了達到集中化管理的目的,Spring Boot 對配置文件的命名也做了一定的約定,分別使用 label 和 profile 概念來指定配置信息的版本以及運行環(huán)境,其中 label 表示配置版本控制信息,而 profile 則用來指定該配置文件所對應(yīng)的環(huán)境

在 Spring Boot 中,配置文件同時支持 .properties 和 .yml 兩種文件格式,結(jié)合 label 和 profile 概念,如下所示的配置文件命名都是常見和合法的:

/{application}.yml/{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties

Yaml 的語法和其他高級語言類似,并且可以非常直觀地表達各種列表、清單、標(biāo)量等數(shù)據(jù)形態(tài),特別適合用來表達或編輯數(shù)據(jù)結(jié)構(gòu)和各種配置文件。在這里,我們指定了如下所示的數(shù)據(jù)源配置,這里使用了 . yml 文件,如下所示:

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/account username: rootpassword: root

如果采用 .propertie 配置文件,那么上述配置信息將表示為如下的形式:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/accountspring.datasource.username=root spring.datasource.password=root

顯然,類似這樣的數(shù)據(jù)源通常會根據(jù)環(huán)境的不同而存在很多套配置。假設(shè)我們存在如下所示的配置文件集合:

全面解讀Spring Boot 中的Profile配置體系

注意,這里有一個全局的 application.yml 配置文件以及多個局部的 profile 配置文件。

主 application.properties 中指定激活的Profile

那么,如何指定當(dāng)前所使用的那一套配置信息呢?

在 Spring Boot 中,我們可以在主 application.properties 中使用如下的配置方式來激活當(dāng)前所使用的 Profile:

spring.profiles.active = test

上述配置項意味著系統(tǒng)當(dāng)前會讀取 application-test.yml 配置文件中的配置內(nèi)容。同樣,如果使用 .yml 文件,則可以使用如下所示的配置方法:

spring: profiles: active: test

事實上,我們也可以同時激活幾個 Profile,這完全取決于你對系統(tǒng)配置的需求和維度:

spring.profiles.active: prod, myprofile1, myprofile2Profile 配置信息只保存在一個文件

當(dāng)然,如果你想把所有的 Profile 配置信息只保存在一個文件中而不是分散在多個配置文件中, Spring Boot 也是支持的,需要做的事情只是對這些信息按 Profile 進行組織、分段,如下所示:

spring: profiles: test #test 環(huán)境相關(guān)配置信息spring: profiles: prod #prod 環(huán)境相關(guān)配置信息

推薦按多個配置文件的組織方法管理各個 Profile 配置信息,這樣才不容易混淆和出錯。

java ?jar 激活Profile

最后,如果我們不希望在全局配置文件中指定所需要激活的 Profile,而是想把這個過程延遲到運行這個服務(wù)時,那么我們可以直接在 java ?jar 命令中添加“?spring.profiles.active”參數(shù),如下所示

java ?jar customerservice-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

這種實現(xiàn)方案在通過腳本進行自動化打包和部署的場景下非常有用。

代碼控制與Profile

在 Spring Boot 中,Profile 這一概念的應(yīng)用場景還包括動態(tài)控制代碼執(zhí)行流程。為此,我們需要使用 @Profile 注解,先來看一個簡單的示例。

@Configurationpublic class DataSourceConfig { @Bean @Profile('dev') public DataSource devDataSource() {//創(chuàng)建 dev 環(huán)境下的 DataSource } @Bean() @Profile('prod') public DataSource prodDataSource(){//創(chuàng)建 prod 環(huán)境下的 DataSource }}

可以看到,我們構(gòu)建了一個 DataSourceConfig 配置類來專門管理各個環(huán)境所需的 DataSource。注意到這里使用 @Profile 注解來指定具體所需要執(zhí)行的 DataSource 創(chuàng)建代碼,通過這種方式,可以達到與使用配置文件相同的效果。

更進一步,能夠在代碼中控制 JavaBean 的創(chuàng)建過程為我們根據(jù)各種條件動態(tài)執(zhí)行代碼流程提供了更大的可能性。

例如,在日常開發(fā)過程中,一個常見的需求是根據(jù)不同的運行環(huán)境初始化數(shù)據(jù),常見的做法是獨立執(zhí)行一段代碼或腳本。基于 @Profile 注解,我們就可以將這一過程包含在代碼中并做到自動化,如下所示:

@Profile('dev')@Configurationpublic class DevDataInitConfig { @Bean public CommandLineRunner dataInit() { return new CommandLineRunner() { @Override public void run(String... args) throws Exception {//執(zhí)行 Dev 環(huán)境的數(shù)據(jù)初始化 }; }

這里用到了 Spring Boot 所提供了啟動時任務(wù)接口 CommandLineRunner,實現(xiàn)了該接口的代碼會在 Spring Boot 應(yīng)用程序啟動時自動進行執(zhí)行 。

@Profile 注解的應(yīng)用范圍很廣,我們可以將它添加到包含 @Configuration 和 @Component 注解的類及其方法,也就是說可以延伸到繼承了 @Component 注解的 @Service、@Controller、@Repository 等各種注解中。

常見配置場景和內(nèi)容

下面來看幾個常見的配置示例 , 加深對 Spring Boot 中配置體系的理解。

對于一個 Web 應(yīng)用程序而言,最常見的配置可能就是指定服務(wù)暴露的端口地址,如下所示:

server: port: 8080

同時,數(shù)據(jù)庫訪問也是 Web 應(yīng)用程序的基本功能,因此,關(guān)于數(shù)據(jù)源的設(shè)置也是常見的一種配置場景,上一篇博文時給出了一個基本的示例。

這里再以 JPA 為例,給出如下所示的一種配置方案:

spring: jpa: hibernate: ddl-auto: create show-sql: true

顯然,這里使用了 Hibernate 作為 JPA 規(guī)范的實現(xiàn)框架,并設(shè)置了 show-sql 等相關(guān)屬性。然后,開發(fā)人員一般也需要設(shè)置日志級別和對象,如下所示的就是一個典型的配置示例:

logging.level.root=WARNlogging.level.com.springcss.customer=INFO

我們設(shè)置了系統(tǒng)的全局日志級別為 WARN,而針對自定義的 com.springcss.customer 包下的日志則將其級別調(diào)整到 INFO。

這里需要注意的是,Spring Boot 基于 application.properties 或 application.yml 全局配置文件已經(jīng)自動內(nèi)置了很多默認(rèn)配置。即使我們不設(shè)置上述配置內(nèi)容,Spring Boot 仍然可以基于這些默認(rèn)配置完成系統(tǒng)的初始化。

自動配置是 Spring Boot 中的一個核心概念,我們會在后續(xù)內(nèi)容中給出詳細的實現(xiàn)原理分析。

如何在應(yīng)用程序中嵌入系統(tǒng)配置信息

我們知道 Spring Boot 通過自動配置機制內(nèi)置了很多默認(rèn)的配置信息,而在這些配置信息中,有一部分系統(tǒng)配置信息也可以反過來作為配置項應(yīng)用到我們的應(yīng)用程序中。

例如,如果想要獲取當(dāng)前應(yīng)用程序的名稱并作為一個配置項進行管理,那么很簡單,我們直接通過 ${spring.application.name} 占位符就可以做到這一點,如下所示:

myapplication.name : ${spring.application.name}

通過 ${} 占位符同樣可以引用配置文件中的其他配置項內(nèi)容,如在下列配置項中,最終“system.description”配置項的值就是“The system springcss is used for health”。

system.name=springcsssystem.domain=healthsystem.description=The system ${name} is used for ${domain}.

再來看一種場景,假設(shè)我們使用 Maven 來構(gòu)建應(yīng)用程序,那么可以按如下所示的配置項來動態(tài)獲取與系統(tǒng)構(gòu)建過程相關(guān)的信息:

info: app: encoding: @project.build.sourceEncoding@ java: source: @java.version@ target: @java.version@

上述配置項的效果與如下所示的靜態(tài)配置是一樣的:

info: app: encoding: UTF-8 java:source: 1.8.0_31target: 1.8.0_31

根據(jù)不同的需求,在應(yīng)用程序中嵌入系統(tǒng)配置信息是很有用的,特別是在一些面向 DevOps 的應(yīng)用場景中。

如何創(chuàng)建和使用自定義配置信息

在現(xiàn)實的開發(fā)過程中,面對紛繁復(fù)雜的應(yīng)用場景,Spring Boot 所提供的內(nèi)置配置信息并不一定能夠完全滿足開發(fā)的需求,這就需要開發(fā)人員創(chuàng)建并管理各種自定義的配置信息。

例如,對于一個電商類應(yīng)用場景,為了鼓勵用戶完成下單操作,我們希望每完成一個訂單給就給到用戶一定數(shù)量的積分。從系統(tǒng)擴展性上講,這個積分應(yīng)該是可以調(diào)整的,所以我們創(chuàng)建了一個自定義的配置項,如下所示:

springcss.order.point = 10

這里,我們設(shè)置了每個訂單對應(yīng)的積分為 10,那么應(yīng)用程序該如何獲取這個配置項的內(nèi)容呢?通常有兩種方法。

使用 @Value 注解

使用 @Value 注解來注入配置項內(nèi)容是一種傳統(tǒng)的實現(xiàn)方法。針對前面給出的自定義配置項,我們可以構(gòu)建一個 SpringCssConfig 類,如下所示:

@Componentpublic class SpringCssConfig { @Value('${springcss.order.point}') private int point;}

在 SpringCssConfig 類中,我們要做的就是在字段上添加 @Value 注解,并指向配置項的名稱即可。

使用 @ConfigurationProperties 注解

相較 @Value 注解,更為現(xiàn)代的一種做法是使用 @ConfigurationProperties 注解。在使用該注解時,我們通常會設(shè)置一個“prefix”屬性用來指定配置項的前綴,如下所示:

@Component@ConfigurationProperties(prefix = 'springcss.order')public class SpringCsshConfig {private int point;//省略 getter/setter}

相比 @Value 注解只能用于指定具體某一個配置項,@ConfigurationProperties 可以用來批量提取配置內(nèi)容。只要指定 prefix,我們就可以把該 prefix 下的所有配置項按照名稱自動注入業(yè)務(wù)代碼中。

我們考慮一種更常見也更復(fù)雜的場景:假設(shè)用戶根據(jù)下單操作獲取的積分并不是固定的,而是根據(jù)每個不同類型的訂單會有不同的積分,那么現(xiàn)在的配置項的內(nèi)容,如果使用 Yaml 格式的話就應(yīng)該是這樣:

springcss: points: orderType[1]: 10 orderType[2]: 20 orderType[3]: 30

如果想把這些配置項全部加載到業(yè)務(wù)代碼中,使用 @ConfigurationProperties 注解同樣也很容易實現(xiàn)。我們可以直接在配置類 SpringCssConfig 中定義一個 Map 對象,然后通過 Key-Value 對來保存這些配置數(shù)據(jù),如下所示:

@Component@ConfigurationProperties(prefix='springcss.points')public class SpringCssConfig { private Map<String, Integer> orderType = new HashMap<>();//省略 getter/setter}

可以看到這里通過創(chuàng)建一個 HashMap 來保存這些 Key-Value 對。類似的,我們也可以實現(xiàn)常見的一些數(shù)據(jù)結(jié)構(gòu)的自動嵌入。

為自定義配置項添加提示功能

如果你已經(jīng)使用過 Spring Boot 中的配置文件,并添加了一些內(nèi)置的配置項,你就會發(fā)現(xiàn),當(dāng)我們輸入某一個配置項的前綴時,諸如 IDEA、Eclipse 這樣的,IDE 就會自動彈出該前綴下的所有配置信息供你進行選擇,效果如下:

全面解讀Spring Boot 中的Profile配置體系

上圖的效果對于管理自定義的配置信息非常有用。如何實現(xiàn)這種效果呢?當(dāng)我們在 application.yml 配置文件中添加一個自定義配置項時,會注意到 IDE 會出現(xiàn)一個提示,說明這個配置項無法被 IDE 所識別,如下所示:

全面解讀Spring Boot 中的Profile配置體系

遇到這種提示時,我們是可以忽略的,因為它不會影響到任何執(zhí)行效果。

但為了達到自動提示效果,我們就需要生成配置元數(shù)據(jù)。生成元數(shù)據(jù)的方法也很簡單,直接通過 IDE 的“Create metadata for ‘springcss.order.point’”按鈕,就可以選擇創(chuàng)建配置元數(shù)據(jù)文件,這個文件的名稱為 additional-spring-configuration-metadata.json,文件內(nèi)容如下所示:

{'properties': [{ 'name': 'springcss.order.point', 'type': 'java.lang.String', 'description': 'A description for ’springcss.order.point’'}]}

現(xiàn)在,假如我們在 application.properties 文件中輸入“springcss”,IDE 就會自動提示完整的配置項內(nèi)容,效果如下所示:

全面解讀Spring Boot 中的Profile配置體系

另外,假設(shè)我們需要為 springcss.order.point 配置項指定一個默認(rèn)值,可以通過在元數(shù)據(jù)中添加一個'defaultValue'項來實現(xiàn),如下所示:

{'properties': [{ 'name': 'springcss.order.point', 'type': 'java.lang.String', 'description': '’springcss.order.point’ is userd for setting the point when dealing with an order.', 'defaultValue': 10}]}

這時候,在 IDE 中設(shè)置這個配置項時,就會提出該配置項的默認(rèn)值為 10,效果如下所示:

全面解讀Spring Boot 中的Profile配置體系

如何組織和整合配置信息

Profile 可以認(rèn)為是管理配置信息中的一種有效手段。

下面,我們繼續(xù)介紹另一種組織和整合配置信息的方法,這種方法同樣依賴于前面介紹的 @ConfigurationProperties 注解。

使用 @PropertySources 注解

在使用 @ConfigurationProperties 注解時,我們可以和 @PropertySource 注解一起進行使用,從而指定從哪個具體的配置文件中獲取配置信息。

例如,在下面這個示例中,我們通過 @PropertySource 注解指定了 @ConfigurationProperties 注解中所使用的配置信息是從當(dāng)前類路徑下的 application.properties 配置文件中進行讀取。

@Component@ConfigurationProperties(prefix = 'springcss.order')@PropertySource(value = 'classpath:application.properties')public class SpringCssConfig {}

既然我們可以通過 @PropertySource 注解來指定一個配置文件的引用地址,那么顯然也可以引入多個配置文件,這時候用到的是 @PropertySources 注解,使用方式如下所示:

@PropertySources({@PropertySource('classpath:application.properties '),@PropertySource('classpath:redis.properties'),@PropertySource('classpath:mq.properties')})public class SpringCssConfig {

這里,我們通過 @PropertySources 注解組合了多個 @PropertySource 注解中所指定的配置文件路徑。SpringCssConfig 類可以同時引用所有這些配置文件中的配置項。

spring.config.location 來改變配置文件的默認(rèn)加載位置

另一方面,我們也可以通過配置 spring.config.location 來改變配置文件的默認(rèn)加載位置,從而實現(xiàn)對多個配置文件的同時加載。例如,如下所示的執(zhí)行腳本會在啟動 customerservice-0.0.1-SNAPSHOT.jar 時加載D盤下的 application.properties 文件,以及位于當(dāng)前類路徑下 config 目錄中的所有配置文件:

java -jar customerservice-0.0.1-SNAPSHOT.jar --spring.config.location=file:///D:/application.properties, classpath:/config/

通過 spring.config.location 指定多個配置文件路徑也是組織和整合配置信息的一種有效的實現(xiàn)方式。

理解配置文件的加載順序

通過前面的示例,我們看到可以把配置文件保存在多個路徑,而這些路徑在加載配置文件時具有一定的順序。Spring Boot 在啟動時會掃描以下位置的 application.properties 或者 application.yml 文件作為全局配置文件:

?file:./config/?file:./?classpath:/config/?classpath:/

以下是按照優(yōu)先級從高到低的順序,如下所示:

全面解讀Spring Boot 中的Profile配置體系

Spring Boot 會全部掃描上圖中的這四個位置,掃描規(guī)則是高優(yōu)先級配置內(nèi)容會覆蓋低優(yōu)先級配置內(nèi)容。而如果高優(yōu)先級的配置文件中存在與低優(yōu)先級配置文件不沖突的屬性,則會形成一種互補配置,也就是說會整合所有不沖突的屬性。

如何覆寫內(nèi)置的配置類

關(guān)于 Spring Boot 配置體系,最后值得介紹的就是如何覆寫它所提供的配置類。我們已經(jīng)反復(fù)強調(diào) Spring Boot 內(nèi)置了大量的自動配置,如果我們不想使用這些配置,就需要對它們進行覆寫。

覆寫的方法有很多,我們可以使用配置文件、Groovy 腳本以及 Java 代碼。這里,我們就以Java代碼為例來簡單演示覆寫配置類的實現(xiàn)方法。

以Spring Security為例

在 Spring Security 體系中,設(shè)置用戶認(rèn)證信息所依賴的配置類是 WebSecurityConfigurer 類。顧名思義,這是一個設(shè)置 Web 安全的配置類。

Spring Security 提供了 WebSecurityConfigurerAdapter 這個適配器類來簡化該配置類的使用方式,我們可以繼承 WebSecurityConfigurerAdapter 類并且覆寫其中的 configure() 的方法來完成自定義的用戶認(rèn)證配置工作。

典型的 WebSecurityConfigurerAdapter 子類及其代碼實現(xiàn)如下所示

@Configurationpublic class SpringHCssWebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override @Bean public UserDetailsService userDetailsServiceBean() throws Exception {return super.userDetailsServiceBean(); } @Override protected void configure(AuthenticationManagerBuilder builder) throws Exception { builder.inMemoryAuthentication().withUser('springcss_user').password('{noop}password1').roles('USER').and().withUser('springcss_admin').password('{noop}password2').roles('USER', 'ADMIN'); }}

這里我們只需要知道,在 Spring Boot 中,提供了一些類的內(nèi)置配置類,而開發(fā)人員可以通過構(gòu)建諸如上述所示的 SpringCssWebSecurityConfigurer 類來對這些內(nèi)置配置類進行覆寫,從而實現(xiàn)自定義的配置信息。

以上就是Spring Boot 中的配置體系Profile全面解讀的詳細內(nèi)容,更多關(guān)于Spring Boot配置體系Profile的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 欧美日韩国产免费一区二区三区 | 日韩在线成人 | av成人在线观看 | 韩国精品| 久久久久久久久一区二区三区 | 欧美日一区二区 | 夜夜艹日日艹 | 国产亚洲欧美一区 | 国产精品一区二区在线观看 | 精品欧美一区二区三区久久久小说 | 福利精品视频 | 日韩在线视频播放 | 日韩在线观看视频一区二区 | 亚洲国产精品人人爽夜夜爽 | 亚洲精品网址 | 一级a毛片| 日韩另类| 欧美国产在线观看 | 色在线免费视频 | 国产成人精品综合 | 91男女视频| 四虎影院观看 | 中文视频一区 | 色爱区综合五月激情 | 黄色大片在线播放 | 97在线免费观看 | 欧美日一区二区 | 在线看91| 欧美一区不卡 | 毛片免费看 | 国产精品成人久久久久 | 亚洲视频一区二区三区 | 欧美日一区二区 | 国产偷录视频叫床高潮对白 | 成人免费视屏 | 日韩中文在线 | 在线视频 91 | 久久久91精品国产一区二区三区 | 国产一区二区三区四区视频 | 亚洲aⅴ天堂av在线电影软件 | 午夜影院免费视频 | 国产最新视频 | 在线观看免费av网站 | jizz国产免费 | 婷婷成人免费视频 | 伊人网影院| 中文字幕亚洲欧美日韩在线不卡 | 成人不卡 | 国产成人精品免费视频大全最热 | 一级毛片免费视频 | 亚洲欧美综合一区 | 精品视频一区在线观看 | 国产精品久久久久久久久久10秀 | 日韩免费av网站 | 奇米亚洲午夜久久精品 | 久久精品无码一区二区日韩av | 欧美日韩中文 | 精品视频网 | 国产羞羞视频免费在线观看 | 成人av免费观看 | 青春草在线观看 | 欧美不卡一区二区 | 中文日韩在线 | 97久久精品 | 精品成人佐山爱一区二区 | 亚洲国产一区在线 | 99久久婷婷 | 91麻豆精品国产91久久久资源速度 | 国产成人精品一区二区 | 国产综合精品一区二区三区 | 免费h视频 | 久久99深爱久久99精品 | 777xacom| 亚洲 欧美 日韩在线 | 在线免费中文字幕 | 欧美视频精品 | 久久人人网 | a级在线免费 | 午夜精品久久久久久久 | 一区二区三区国产 | 国产精品久久久久久久久免费桃花 | 天天干狠狠| 精品久久久网站 | 天天澡天天狠天天天做 | 国产激情网站 | 久久99精品久久久久子伦 | 艹逼网 | 日韩一区二区精品视频 | 精品一区二区三区免费 | 久久免费视频观看 | 久久精品国产99精品国产亚洲性色 | 亚洲一区二区三区四区五区中文 | 日韩av免费在线观看 | 国产欧美日韩综合精品一区二区 | 国产在线精品一区二区三区 | 亚洲在线视频 | 精品91| 天天干人人 | 亚洲欧洲一区二区三区 | 久久中文字幕一区 | 日韩激情一区二区 | 欧美激情在线免费观看 | 性色国产 | 国产精品亚洲第一区在线暖暖韩国 | 国产美女在线播放 | 91成人免费看片 | 亚洲国产精品久久 | 久久噜噜噜精品国产亚洲综合 | 国产精品久久久久久久美男 | 国产精品久久久久久久午夜 | 亚洲成人精品在线 | 可以在线看的黄色网址 | 91精品国产色综合久久 | 日韩一区二区三区在线观看 | 欧美精品在线免费观看 | 91成人免费在线视频 | 欧美日韩国产综合在线 | www.日韩在线观看 | 久久一区二区三区四区五区 | 日韩国产欧美精品 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲一区二区三区免费视频 | 国产人免费人成免费视频 | 精品一区二区国产 | 国产一区二区免费电影 | 羞羞的视频在线免费观看 | 99热在线免费观看 | 免费成人在线观看视频 | 国产精品自拍一区 | 亚洲精品综合 | 精品一区二区三区久久久 | 中国一级免费毛片 | 国产精品第一国产精品 | 在线a视频 | 日本免费一区二区三区 | 日韩成人小视频 | 男人天堂网址 | 精品成人免费一区二区在线播放 | 欧美一级艳情片免费观看 | 欧美综合一区二区 | 美女黄视频网站 | 性色爽爱 | 日韩色图在线观看 | 日韩成人免费中文字幕 | 亚洲激情 欧美 | 亚洲一区二区精品视频 | 日批免费在线观看 | 亚洲精品乱码久久观看网 | 欧美一级片免费在线观看 | 一区二区三区国产 | 欧美一区二区三区电影 | 亚洲成av人片在线观看 | 亚洲欧美精品一区二区 | 中文字幕av免费 | av观看| 欧美一区二区三区精品 | 成人午夜啪啪好大 | 成人精品一区二区 | 欧美一区永久视频免费观看 | 日韩欧美一区二区三区 | 久久精品欧美 | 久久久精品区 | 中文字幕视频在线 | 久热精品视频 | 欧美在线观看一区 | ririsao久久精品一区 | 国产精品欧美久久久久一区二区 | 在线免费观看羞羞视频 | 青青草免费在线 | 国产成人精品亚洲日本在线观看 | 男女视频免费看 | 午夜黄色影院 | 中文字幕第33页 | 亚洲 中文 欧美 日韩 在线观看 | 欧美精品成人一区二区三区四区 | www.久久精品视频 | 中文字幕日韩一区二区 | 日韩色av| 精品综合久久 | 在线观看亚洲视频 | 国产成人一区 | 亚洲人成在线播放 | 国产一级纯肉体一级毛片 | 91精品久久久久久综合五月天 | 一区二区三区在线免费 | 成人在线h| 亚洲视频在线播放 | 老司机深夜福利视频 | 午夜激情av | 日韩欧美二区 | 亚洲久久一区 | 欧洲av在线| 亚洲男人的天堂网站 | 欧美日韩一区二区视频在线观看 | 国产在线一区二区三区 | 狠狠ri | 久久精品久久久久 | 国产男女免费视频 | 日韩视频欧美视频 | 国产日产欧美a级毛片 | 精品国产乱码一区二区三区四区 | 国产精品美女久久久久aⅴ国产馆 | 最新国产福利在线 | 一区二区免费看 | 午夜精品久久久久久99热软件 | 色综合久久伊人 | 欧美精品第一页 | 黄色影视网址 | 欧美激情在线精品一区二区三区 | 精品久久久久久久久久久久包黑料 | 国产视频久久精品 | 国产精品成人在线 | 青青草久久爱 | 91精品综合久久久久久五月天 | 福利在线播放 | 成人午夜在线 | 日韩欧美在线视频 | 人人澡人人草 | 国产午夜精品一区二区三区 | 国产精品久久久久久婷婷天堂 | 国产伦精品一区二区三区在线 | 国产精品视频久久 | 日韩精品一区二区三区 | 午夜影院色 | 亚洲精品二三区 | 国产一区二区 | 亚洲超碰av | 久草天堂 | 黄毛片网站 | 91在线精品秘密一区二区 | 欧美日韩精品在线一区 | 亚洲a视频 | 成人免费在线视频观看 | 亚洲一区av | 国产一级黄 | 久久永久视频 | 亚洲人成在线播放 | 午夜精品影院 | 国产综合亚洲精品一区二 | 亚洲精品一区二区三区蜜桃久 | 久久久久99精品国产片 | 天堂成人av | 龙珠z普通话国语版在线观看 | 亚洲免费在线观看视频 | 久久婷婷香蕉 | 精品网站999www | 国产精品国产 | 日韩色区 | 男人天堂网址 | 97色综合| 精品国产一区二区在线 | 精品久久精品久久 | 成人1区| 亚洲国产高清视频 | 天天射欧美 | 黄色在线观看网址 | 81精品国产乱码久久久久久 | 男女羞羞羞视频午夜视频 | 亚洲在线电影 | 欧美成人精品一区二区三区 | 久久精品99 | 亚洲成人一区二区三区 | 国产精品久久久久久久久福交 | 精品日韩欧美一区二区三区 | 久久国产视频一区二区 | 成人毛片在线观看 | 日本精品在线观看 | 欧美国产91 | 欧美国产伦久久久久久 | 久久精品免费国产 | 国产一区二区av | 欧美日韩中文字幕在线 | 91精品久久久久久久久久入口 | 中文字幕av亚洲精品一部二部 | 女男羞羞视频网站免费 | 在线第一页 | 日韩综合色 | 亚洲视频在线观看免费 | h免费在线观看 | 久久国产精品久久久久久电车 | 国精产品一区一区三区免费完 | 亚洲三区在线观看 | 国产精产国品一二三产区视频 | 91国在线高清视频 | 国产一区二区黑人欧美xxxx | 欧美激情高清 | 青娱乐一区 | 国产成人福利在线观看 | 一区二区免费播放 | 欧美天堂在线观看 | 黑人av| 99精品全国免费观看视频软件 | av在线一区二区三区 | 伊人看片| 男人av网 | 国产色视频网站 | 久草精品视频 | 黄色在线免费观看 | 一区二区手机在线 | 三级黄视频在线观看 | 国产h片在线观看 | 在线观看视频91 | 成人一级毛片 | 日韩欧美国产一区二区三区 | 精品乱码一区二区 | 成人午夜在线视频 | 一级黄色片在线 | 99久久国产综合精品女不卡 | 成人一区二区在线观看 | 精品国产乱码久久久久久1区二区 | 国产精品日本一区二区在线播放 | 天天天干天天天操 | 国产伦精品一区二区 | 久久噜噜噜精品国产亚洲综合 | 国产欧美日韩综合精品一区二区 | 欧美精品一区二区三区一线天视频 | 久久久久久亚洲精品 | 婷色综合 | 欧美日韩视频在线 | 成版人性视频 | 日本三级电影网站 | 日韩电影专区 | 久久久久久久 | 久久一级 | 国产69精品99久久久久久宅男 | 啪一啪| 91精品国产一区二区三区香蕉 | 天天综合网91 | 久久综合久久综合久久综合 | 激情婷婷 | 天天综合91 | 国产一区二区在线视频观看 | 高清av网站 | 久久777| 日韩成人中文字幕 | 日韩2020狼一二三 | 先锋资源在线观看 | 美女h视频 | 一区二区三区国产视频 | 狠狠干狠狠操 | 久久精品亚洲 | 日韩精品视频免费在线观看 | 久久国产精品久久 | 久久久久女人精品毛片九一韩国 | 国产成人精品一区二区三区四区 | 黄色一级毛片在线观看 | 99re视频在线 | 1区2区视频 | 国产99久久精品 | 日韩精品视频在线 | 欧美日韩三区 | 国产精品毛片一区二区在线看 | 日日爱影视| 成人亚洲在线观看 | 中文字幕av一区二区 | 神马午夜 | 天天操天操 | 精品护士一区二区三区 | 一区不卡 | av天天操 | 欧美午夜一区二区三区免费大片 | 日韩免费电影 | 国产美女一区 | 精品成人免费一区二区在线播放 | 成年人在线观看 | 综合精品 | 午夜在线观看影院 | 一区二区不卡 | 精品久久久久久 | 成人片免费看 | 欧美日韩欧美日韩 | 亚洲欧洲中文日韩 | 影音先锋资源av | 一区二区在线免费观看 | 黄视频入口 | 一级在线观看 | 欧美日韩一区二区三区在线观看 | 在线免费视频一区 | 不用播放器的av | 国产成人精品午夜视频' | av在线日韩 | 亚洲激情av| av国产精品毛片一区二区小说 | 男人的天堂久久 | 国产在线看片 | 久久网页| a毛片国产| 伦理一区 | 久久久亚洲综合 | 国产麻豆乱码精品一区二区三区 | 久久蜜桃视频 | 国产精品久久久久久久久久妞妞 | 欧美日韩国产一区二区三区不卡 | 91国内外精品自在线播放 | 成人午夜免费视频 | 久久精品视频亚洲 | 欧美精品综合 | 91伊人| 日韩欧美国产精品 | 久久美女视频 | 嫩草影院黄色 | 999精品免费 | 太平公主一级艳史播放高清 | 中文日韩在线 | 夏同学福利网 | 91视频www| 男女精品视频 | 精品久久久久久久 | 91麻豆产精品久久久久久 | 国产免费天天看高清影视在线 | 91精品国产一区二区三区香蕉 | www97影院| 欧美极品一区二区三区 | 电影91久久久 | 日韩一区二区三区在线视频 | 国产日韩一区二区三区 | 国产三级日本三级美三级 | 尤物视频在线观看 | 精产国产伦理一二三区 | 国产精品丝袜视频 | 一级毛片中国 | 国产另类ts人妖一区二区 | 久草视| 亚洲国产精品自拍 | 久久精品一 | 国产视频导航 | 99久久久久国产精品免费 | 日韩一区高清视频 | 天天操网 | 羞羞视频在线观看视频 | 日本一区视频在线观看 | 亚洲一区二区三区在线免费观看 | 成人毛片视频免费 | 国产视频三区 | 日韩三区 | 国产精品一码二码三码在线 | 91午夜在线 | 艳妇荡乳豪妇荡淫 | 亚洲成人一 | 在线一区视频 | 伊人网在线 | 精品中文字幕在线 | 国产中文字幕在线观看 | 亚洲精品久久久久久久久久 | 一本一本久久a久久精品综合妖精 | 97久久香蕉国产线看观看 | 日韩免费在线观看视频 | 亚洲成人一区二区 | 亚洲一区二区黄 | 成人综合在线观看 | 久久久久久久91 | 久久精品日产高清版的功能介绍 | 久久男人天堂 | 老妇激情毛片免费 | 国产一级特黄aaa大片评分 | 91精品国产综合久久香蕉922 | 99精品欧美一区二区三区 | 国产精品久久国产精品 | 中文字幕一区二区三区在线视频 | 国产精品二区三区 | 久久精品国产一区二区电影 | 国产大片aaa | 欧美性受 | 97精品国产97久久久久久粉红 | 亚洲国产精品久久久久婷婷老年 | 天天操网 | 香蕉视频成人在线观看 | 色婷婷久久久swag精品 | 在线视频中文字幕 | 亚洲综合中文 | 欧美黑人一级爽快片淫片高清 | 日韩在线视频中文字幕 | 狠狠干狠狠干 | 精品国产鲁一鲁一区二区三区 | 人人干人人看 | 国产亚洲精品综合一区91555 | 亚洲高清久久 | 国产精品观看 | 国产高清在线观看 | 成人精品鲁一区一区二区 | 久草新视频在线观看 | 岛国a视频 | 欧美日韩一区二区三区在线观看 | 午夜99 | 国产免费av在线 | 91视频.com | 亚洲综合二区 | 国产日产精品一区二区三区四区 | 亚洲协和影视 | 欧美精品一二三区 | 在线视频a | 色.com| 亚洲综合激情网 | www.99re| 玖色视频| 亚洲精品字幕 | 热久久这里只有精品 | 国产精品高颜值在线观看 | 欧美日韩在线看 | 久在线视频播放免费视频 | 亚洲午夜电影 | 毛片av在线播放 | 亚洲成人av在线 | 日本免费www| 色花av | 91精品国产乱码久 | 欧美精品国产精品 | jlzzjlzz亚洲日本少妇 | 国产精品国产三级国产aⅴ入口 | 久久久日韩精品一区二区三区 | 一级毛片免费完整视频 | 欧美精产国品一二三区 | 在线观看成人小视频 | 免费v片 | 久久精品国产99国产 | 成人一级片 | 国产免费一区二区三区 | 91久久久久久久久久久久久久久久 | 亚洲精品视频免费 | 好姑娘影视在线观看高清 | 在线色网站 | 国产成人精品一区二区三区视频 | 日本一区二区三区免费观看 | 精品一区二区在线观看 | 青娱乐国产精品视频 | 一级a毛片 | 久久国产精品99久久久久久牛牛 | 国内av网站 | 国产亚洲精品精品国产亚洲综合 | 天堂精品| 福利视频三区 | 午夜视频网站 | 狠狠操夜夜操 | 国产日韩在线视频 | 欧美视频综合 | 久久久影院| 亚洲午夜精品一区二区三区他趣 | 91麻豆精品国产91久久久资源速度 | 亚洲xx在线 | 久久综合九色综合欧美狠狠 | 亚洲精品91| 欧美精品一区二 | 亚洲香蕉视频 | 久久九精品 | 日本黄色大片免费 | 久久男人 | 国产成人在线看 | 婷婷色国产偷v国产偷v小说 | 日韩精品一区二区三区在线观看 | 精品久久精品 | 精品国产精品三级精品av网址 | 国产免费拔擦拔擦8x高清在线人 | 日韩中文一区二区三区 | 激情毛片 | 久久porn| 91视频在线播放视频 | 精品国产乱码久久久久久影片 | 人人做人人澡人人爽欧美 | 天天干天天操 | 精品久久久久久久久久久久久久久久久久 | 噜噜噜噜狠狠狠7777视频 | 午夜久久久 | av男人电影天堂 | 黑人巨大精品欧美一区二区免费 | 北条麻妃一区二区三区在线 | 中文字幕国产一区 | 亚洲啊v在线 | 国产精品免费av | 午夜影院免费看 | 欧美成年黄网站色视频 | 久久在线 | 欧美日韩在线看 | 久久久久久久久国产 | www日韩欧美 | 一级在线播放 | 久久精品视频在线播放 | av网站推荐 | 一级片观看 | 日本黄色大片免费 | 亚洲毛片网站 | 国产一区二区在线播放 | 午夜黄色影院 | 日韩拍拍 | 一区二区三区在线 | 天天精品视频免费观看 | 亚洲欧洲av在线 | 99久久婷婷国产综合亚洲 | 91社影院在线观看 | 国产浪潮av色综合久久超碰 | 久久精品二区 | 国产一区二区三区久久久 | 免费观看的av | 九九久久精品 | 国产国拍亚洲精品av | 精品国产一区二区三区久久久久久 | 国内成人精品2018免费看 | 国产精品欧美久久久久一区二区 | 高清xxxx | 欧美日韩不卡合集视频 | 午夜三区 | 亚洲精品一区二区网址 | 中文久久| 国产在线中文字幕 | 亚欧毛片 | 男人的天堂久久 | 特大毛片| 欧美黄色性视频 | 国产欧美久久久久久 | 久久久久国产一级毛片高清版小说 | 一级黄色影视 | 国产精品美女久久久久久久久久久 | 毛片网站免费在线观看 | 91精品国产aⅴ | 在线观看成人小视频 | 国产a视频|